1. 最简单的makefile
假设编译器是gcc, 代码结构很简单, 源文件有main.c, test.h, test.c, 代码为:
/*file:test.h*/
#ifndef TEST_H
#define TEST_H
void 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.o
demo:$(objects)
gcc -o demo $(objects)
main.o:main.c test.h
gcc -c -o main.o main.c
test.o:test.c test.h
gcc -c -o test.o test.c
.PHONY:clean
clean:
rm -f *.o demo
生成demo可执行文件的命令为: make 或 make demo
2. 较大项目的makefile
较大项目的源文件很多, 为每个.o文件编写生成的规则, 会非常的麻烦, 将来新增或修改源文件的同时也要小心地维护makefile, 这样就带来了很多的不便. 利用make程序的自动推导功能和模式规则, 可以批量生成.o文件.
第一个例子的makefile可以改写为:
objects= main.o test.o
%.o:%.c
gcc -c $< -o $@
demo:$(objects)
gcc -o $@ $(objects)
.PHONY:clean
clean:
rm -f *.o demo
执行命令: make demo, 以下为make的执行过程:
mjn@mjn-desktop:~/codes/makefile/demo$ make demo
gcc -c main.c -o main.o
gcc -c test.c -o test.o
gcc -o demo main.o test.o
3. 跨平台项目的makefile
跨平台的代码, 可能被不同的编译器编译, 所以不能把编译器和选项写死在makefile中, 需要根据不同的系统来选择相应的编译器(Linux的gcc/g++, IBM AIX的xlc/xlC, HP-UX的aCC/aCC).
to be continue.