編譯多個文件

  • 2020 年 10 月 18 日
  • 筆記

假設我們寫了一個foo.h的頭文件,如下:

#ifndef foo_h
#define foo_h

namespace m1 {
    void foo();
}

#endif

例外,我們肯定還會寫它的相關庫文件來實現函數的功能,我們就寫一個foo.c吧,如下:

#include <iostream>
#include “foo.h”//這裡一定要打雙引號,因為它不是標準頭文件。

void m1::foo()
{
    std::cout<<“hello,world\n”;
}

最後,我們在寫一個main.c文件來調用它:

#include <iostream>
#include “foo.h”

void foo ()//這裡我們在主函數也寫了一個同名字的foo函數,我們編譯的時候會不會因為名字相同報錯呢,我們在主函數調用試試。
{
    std::cout<<“HELLO, WORLD!\n”;
}
int main ()
{
    m1::foo();//當然不會啦,我們在foo.h頭文件編寫的foo函數是放在名字空間m1中,所以就和我們自己的foo區分開來了,不過我們在調用時一定要加上它的名字空間。
    foo();

    return 0;
}

最後我們編譯,首先應該:

gcc -c foo.c

gcc -c main.c

這樣生成對應的目標文件,最後一步就是:

gcc main.o foo.o -o test

生成可執行文件test,然後運行結果如下:

hello, world

HELLO, WORLD!

由於瀏覽器的問題,我的截圖傳不上來,就是手打了運行結果。