makefile示例(添加依赖、编译参数)
makefile示例

上图依赖只有.c,当.h文件修改后,make时不会重新生成test,故此Makefile存在问题

上图,添加依赖,make,重新生成了test,但,源文件中包含了很多的头文件,如何管理起来呢?
a. 改进:支持头文件依赖
gcc怎么生成依赖
gcc -M c.c 打印出来
gcc -M -MF c.d c.c 把依赖存放在c.d中
gcc -c -o c.o c.c -MD -MF c.d 编译出c.o,并把依赖放入c.d中

上图仅仅添加了 一个文件c.o:c.c c.h 依赖关系,若有多个文件依赖关系怎么管理呢?见下图

dep_files = $(patsubst %, .%.d, $(objs)) #对文字进行了修改,dep_files值是.a.o.d .b.o.d .c.o.d
第一次执行make时,dep_files值其实是空的,其实并没什么关系,还记的要解决的问题是什么吗,是头文件依赖关系。再在执行make时,dep_files值不为空了,故修改头文件后,对应的源文件和目标文件会被更新!
遇到的问题
no rule to make target '/usr/lib/gcc/x86 64-linux-gnu/5/include/stddef.h', needed by 'a.o'.stop 原因是不知道了,把产生的中间文件清理后,得以解决(make clean make distclean)
编译之前make clean,是个好习惯
b. 添加CFLAGS(不是来自Makefile,而是来自gcc)
编译参数
例如:把警告当成错误 -Werror
指定头文件目录 -I.

上图是添加编译选项

上图是指定头文件目录
c. 分析裸板Makefile
之前讲到过的内容:通用字符、变量、函数
-----------------------------------------------------------------------------------
%起到匹配任意长度字符作用(跟通配符(% *)区分)


浙公网安备 33010602011771号