例子:一个工程包括main.c和bloomfilter.c文件,bloomfilter.c中用到了数学函数log
简单的Makefile文件如下所示:
其中:main.o依赖于bloomfilter.o,因此main.o必须写在bloomfilter.o前面,当要使用数学函数时,由于数学函数位于libm.so库文件和math.h文件,gcc需要使用-lm选项告诉编译器,程序中的数学函数要到这个库文件中查找(一般位于/lib目录下)
makefile中include的作用:https://www.cnblogs.com/cuckoos/articles/5049984.html
Makefile中的include命令和c语言中的include命令类似,例如include file.dep,即把文件file.dep文件中的内容包含进当前的makefile文件中。假设Makefile文件中的所有规则组成的集合为u1;由file.dep文件中的所有规则组成的集合称为u2;u1和u2的并集称为集合u。
makefile中的include命令先将file.dep包含进当前Makefile文件(第一次包含),这样Makefile文件中就有了file.dep文件的内容;(断点A)
然后在集合u中检查是否有以file.dep为目标的规则。如果u中没有一file.dep为目标的规则,或者虽然有以file.dep为目标的规则,但根据依赖关系(即便在规则中的命令执行后也)不能使得file.dep文件更新,则Makefile文件最终包含的就是file.dep文件当前的内容,include命令执行结束;(断点B)
如果集合u中有以file.dep为目标的规则,并且该规则使得file.dep文件发生了更新,则include命令将更新后的file.dep文件再次包含进当前的Makefile文件(再次包含),跳转到断点A往下继续执行。
Makefile文件注意点:
1、Makefile文件中,如果有两个或者两个以上规则具有相同的目标,则在这些规则中,任一规则中的依赖文件的更新都会导致规则中的命令执行。并且只会导致最后一个规则中的命令被执行,前面规则的命令被忽略。