执行make时以下几种文件会被重新编译:
1.所有的源文件没有被编译过,则对各个 C源文件进行编译并进行链接,生成最后的可执行
程序;
2.每一个在上次执行make之后修改过的C源代码文件在本次执行make时将会被重新编
译;
3.头文件在上一次执行 make 之后被修改。则所有包含此头文件的 C 源文件在本次执
make 时将会被重新编译。
一个简单的 Makefile基本格式:
TARGET... : PREREQUISITES...
COMMAND
...
...
注意:每一个命令行必须以[Tab]字符开始,
[Tab]字符告诉 make 此行是一个命令行。make 按照命令完成相应的动作。这也是书写
Makefile中容易产生,而且比较隐蔽的错误。
.o文件的更新:
1.目标.o 文件不存在,使用其描述规则创建它;
2.目标.o 文件存在,目标.o 文件所依赖的.c 源文件、 .h 文件中的任何一个比目标.o 文件“更
新”(在上一次 make之后被修改)。则根据规则重新编译生成它;
3.目标.o 文件存在,目标.o 文件比它的任何一个依赖文件(的.c 源文件、.h 文件)“更新”
(它的依赖文件在上一次 make之后没有被修改) ,则什么也不做。
目标文件的更新:
1.目标文件“edit”不存在,则执行规则创建目标“edit”。
2.目标文件“edit”存在,其依赖文件中有一个或者多个文件比它“更新”,则根据规则重新
链接生成“edit”。
3.目标文件“edit”存在,它比它的任何一个依赖文件都“更新”,则什么也不做。
使用一个变量“objects”
“OBJECTS”、“objs”、“OBJS”、“obj”或者“OBJ”来作为所有的.o 文件的.列表的替代.
书写规则建议的方式是:单目标,多依赖。就是说尽量要做到一个规则中只存在一个目标文件,
可有多个依赖文件。尽量避免多目标,单依赖的方式。
.PHONY : clean
clean :
-rm edit $(objects)
1. 通过“.PHONY”特殊目标将“clean”目标声明为伪目标。防
止当磁盘上存在一个名为“clean”文件时,“clean”所在规则的命令无法执行
2. 在命令行之前使用“-” ,意思是忽略命令“rm”的执行错误