第十章 Make的隐含规则
1.make 的主要隐含规则
1. 编译 C 程序
“ N.o ”自动由“ N.c ” 生成,执行命令为“ $(CC) -c $(CPPFLAGS) $(CFLAGS) ”。
2. 编译 C++ 程序
“ N.o ”自动由“ N.cc ”或者“ N.C ” 生成,执行命令为“ $(CXX) -c $(CPPFLAGS) $(CFLAGS) ”。建议使用“ .cc ”作为 C++ 源文件的后缀,而不是“ .C ”
3. 汇编和需要预处理的汇编程序
“ N.s ”是不需要预处理的汇编源文件,“ N.S ”是需要预处理的汇编源文件。汇编器为“ as ”。
“ N.o ” 可自动由“ N.s ”生成,执行命令是:“ $(AS) $(ASFLAGS) ”。
“ N.s ” 可由“ N.S ”生成, C 预编译器“ cpp ”,执行命令是:“ $(CPP) $(CPPFLAGS) ”。
4. 链接单一的 object 文件
“ N ”自动由“ N.o ”生成,通过 C 编译器使用链接器( GUN ld ),执行命令是:“ $(CC) $(LDFLAGS) N.o $(LOADLIBES) $(LDLIBS) ”。
此规则仅适用:由一个源文件直接产生可执行文件的情况。当需要有多个源文件共同来创建一个可执行文件时,需要在 Makefile 中增加隐含规则的依赖文件。例如:
x : y.o z.o
当“ x.c ”、“ y.c ”和“ z.c ”都存在时,规则执行如下命令:
cc -c x.c -o x.o
cc -c y.c -o y.o
cc -c z.c -o z.o
cc x.o y.o z.o -o x
rm -f x.o
rm -f y.o
rm -f z.o
在复杂的场合,目标文件和源文件之间不存在向上边那样的名字对应关系时(“ x ”和“ x.c ”对应,因此隐含规则在进行链接时,自动将“ x.c ”作为其依赖文件)。这时,需要在 Makefile 中明确给出描述目标依赖关系的规则。
通常, gcc 在编译源文件时(根据源文件的后缀名来启动相应的编译器),如果没有指定“ -c ”选项, gcc