编译多个文件

  • 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!

由于浏览器的问题,我的截图传不上来,就是手打了运行结果。