makefile demo

来源:互联网 发布:dota2 知乎 编辑:程序博客网 时间:2024/06/04 22:46

1. 最简单的makefile

假设编译器是gcc, 代码结构很简单, 源文件有main.c, test.h, test.c, 代码为:

/*file:test.h*/#ifndef TEST_H#define TEST_Hvoid func();#endif/*file:test.c*/#include "test.h"void func() {  /*some codes*/}/*file:main.c*/#include "test.h"int main() {  func();  return 0;}

makefile内容如下:

objects= main.o test.odemo:$(objects)gcc -o demo $(objects)main.o:main.c test.hgcc -c -o main.o main.ctest.o:test.c test.hgcc -c -o test.o test.c.PHONY:cleanclean:rm -f *.o demo
生成demo可执行文件的命令为: make 或 make demo

2. 较大项目的makefile

较大项目的源文件很多, 为每个.o文件编写生成的规则, 会非常的麻烦, 将来新增或修改源文件的同时也要小心地维护makefile, 这样就带来了很多的不便. 利用make程序的自动推导功能和模式规则, 可以批量生成.o文件.

第一个例子的makefile可以改写为:

objects= main.o test.o%.o:%.cgcc -c $< -o $@demo:$(objects)gcc -o $@ $(objects).PHONY:cleanclean:rm -f *.o demo

执行命令: make demo, 以下为make的执行过程:

mjn@mjn-desktop:~/codes/makefile/demo$ make demogcc -c main.c -o main.ogcc -c test.c -o test.ogcc -o demo main.o test.o
3. 跨平台项目的makefile
跨平台的代码, 可能被不同的编译器编译, 所以不能把编译器和选项写死在makefile中, 需要根据不同的系统来选择相应的编译器(Linux的gcc/g++, IBM AIX的xlc/xlC, HP-UX的aCC/aCC).

to be continue.

原创粉丝点击