gcc如何编译多个文件

时间:2025-03-02 13:04:21

之前一直搞不懂为什么gcc的时候别人都是后面跟着多个文件,明明直接编译主函数的那个源文件也可以运行呀。比如有两个文件,一个是主函数的,一个hello_f是调用函数的定义。

:

#include"hello_f.c"
int main(){
    fun();
}

hello_f.c:

#include<>
void fun(){
    printf("hi");
}
void fun2(){
    printf("f2");
}

这样只要执行gcc 就完成了。

但有的时候,可能不希望把hello_f里的函数都开放使用,只允许使用一部分。那么这个时候就不能include整个.c文件了,需要使用头文件,把允许使用的函数放在头文件里。

hello_f.h

#ifndef JSONDATA_HELLO_F_H
#define JSONDATA_HELLO_F_H
void fun();
#endif //JSONDATA_HELLO_F_H

改为:

#include"hello_f.h"
int main(){
    fun();
}

这样主函数里就不能调用fun2了,同时还实现了接口和定义的分离。

需要注意的是,这样gcc的时候就不能只编译一个了,需要被hello_f.c也编译

gcc  hello_f.c

这多文件编译的一个最简单的方案,不过有的时候只是改了主函数的一个些语句,并没有改hellof_f.c里的内容,全部重新编译源文件比较耗时。

可以分别编译每个源文件,但是不做链接操作

gcc -c . 
gcc -c hello_f.c
gcc  hello_f.o

这样,如果每次只要只要编译改动的文件,再做链接即可。