1、makefile规则
基本格式:
target ... : prerequisites ...
command
...
...
1)target也就是一个目标文件,可以是Object File,也可以是执行文件。还可以是一个标签(Label)
2)prerequisites就是,要生成那个target所需要的文件或是目标。
3)command也就是make需要执行的命令。(任意的Shell命令)
2、示例
#hello为最终生成的可执行文件
#其依赖于factorial.o hello.o两个目标文件
#cc -o ***为gcc命令,生成可执行文件
hello : factorial.o hello.o
cc -o hello factorial.o hello.o
#factorial.o依赖于factorial.c factorial.h两个源文件
#cc -c *** 为gcc命令:生成目标文件
factorial.o : factorial.c factorial.h
cc -c factorial.c
#hello.o依赖于hello.c factorial.h两个源文件
hello.o : hello.c factorial.h
cc -c hello.c
#clean为命令集,用于清理。
#在这里清理的是hello.o、factorial.o、hello文件
clean :
rm hello.o factorial.o hello
3、使用
makefile写完后,存盘,保存名为makefile。
进入此文件目录下,执行命令make。
makefile程序会根据makefile文件最终生成hello可执行文件。
可使用make clean命令清理中间文件和可执行文件。
4、变量的使用
在makefile中可以声明变量,类似于c语言中的宏。上述makefile可以写成如下形式:
#定义hello_parts变量
hello_parts = factorial.o hello.o
hello : $(hello_parts)
cc –o hello $(hello_parts)
...
clean :
rm $(hello_parts) hello
5、makefile的自动推导机制
在makefile中,存在如下机制:
如果目标文件为hello.o,则makefile内部会自动寻找hello.h,hello.c,并且自动执行cc –c 命令。
例如以上的makefile可以修改为:
hello_parts = factorial.o hello.o
#factorial模块的相关生成语句被完全省略掉,因为可以自动推导
#hello.o的生成也被部分省略,因为可以自动推导找出hello.c/hello.h
hello : $(hello_parts)
cc –o hello $(hello_parts)
hello.o : factorial.h
clean :
rm $(hello_parts) hello
6、清空目标文件的规则
1)将clean命令集写在makefile的最后
2)按如下形式书写:
.PHONY : clean
clean :
-rm edit $(objects)
其中-rm表示无论遇到什么文件出现问题,继续执行。