编译多文件
我们有以下三个文件
file1.c
#include "stdio.h"
#include "file2.h"
int main(void){
printf("%s:%s:%d\n", __FILE__, __FUNCTION__, __LINE__);
foo();
return 0;
}
file2.h
void foo(void);
file2.c
#include
#include "file2.h"
void foo(void) {
printf("%s:%s:%d \n", __FILE__, __FUNCTION__, __LINE__);
return;
}
执行 gcc file1.c file2.c -o server
生成可执行程序server, 执行./server
我们可以得到以下输出
file1.c:main:5
file2.c:foo:5
这样就可以编译多文件的程序了。linux下还需要make程序来自动化编译等操作。添加Makefile文件
server : file1.o file2.o
$(CC) -o $@ $^
.PHONY: clean
clean:
rm *.o server
执行make
, 就能编译程序了。执行make clean
就会删除make
产生的临时文件。
Makefile有以下模式
target: require
action
其中target时产物,require时生成target的依赖。 action是动作,可以是编译程序的动作,也可能是输出些信息。
上面的例子中target是server, 依赖是file1.o, file2.o。 make会自动.o 文件执行 cc -c .c -o *.o 命令。上面例子中执行cc -c file1.c -o file1.o
和 cc -c file2 -o file2.o
。$(CC) 是内置变量,linux下会解释成cc。$@是target, $^是require。这样就能生成可执行程序server了。
下面加了个clean
, 因为不是真正的文件,需要用.PHONY: clean
说明是伪文件。