一、makefile注意事项:
1、makefile工程管理工具:帮助我们实现项目的自动编译。
2、在C语言中,只有源文件才会参与编译,makefile能够帮助我们整个项目的源文件,例如只有某些文件修改了才会被编译,以及那些需要先编译,那些文件后编译。
3、makefile是一个有很多规则的文件,由make这个工具来执行。
4、makefile中的一条规则由以下几个部分组成:
目标: 依赖
命令列表
①、其中第一条规则中的“目标”,将会成为终极目标,其他的规则没有必然的顺序。
②、每一个规则中目标,不一定要有依赖。
③、每一个规则中的目标,都可以是一个文件,也可以是一个标签。
④、每一个规则中目标,不一定非要有命令列表。
⑤、makefile是根据文件的时间信息,来判断是否需要重新编译。
⑥、makefile使用#号注释的。
⑦、如果想取消某一条命令本身的打印,那么可以在这个命令的前面加上@符号。
二、makefile变量赋值方式
B := $A :被称为立即展开赋值
c = $A =被称为延迟展开赋值
D ?= $A ?=被称为条件赋值,当D之前没有赋过值时,将A的值赋给它;否则保持原值。
E += $A +=被称为追加赋值,将A的值空格拼接在E之前的值后面。
Makefile有三个非常有用的变量。分别是 @ , @, @,^,$<代表的意义分别是:
@ − − 目 标 文 件 , @--目标文件, @−−目标文件,^–所有的依赖文件, < − − 第 一 个 依 赖 文 件 。 <--第一个依赖文件。 <−−第一个依赖文件。$是当前执行的进程的进程编号。
$*模式规则中的所有%匹配的部分。
$?模式规则中所有比所在规则中的目标更新的文件组成的列表。
%号万能匹配符,如%.c %.o。
makefile还有很多的隐含规则,可以用make -p查找。
如果我们没有显示写明某些规则,那么make会去隐含规则中查找有没有相应的规则,如果还没有,曹辉报错退出。
-I DIR 当包含其他 makefile 文件时,可利用该选项指定搜索目录
https://blog.csdn.net/qq1452008/article/details/50855810/?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0.pc_relevant_aa&spm=1001.2101.3001.4242.1&utm_relevant_index=3
Makefile学习笔记:https://blog.csdn.net/qq_37863891/article/details/90242940
伪目标:不是一个真正的目标,仅仅是为了执行其所在规则下面的命令,不应该让make来判断它是否存在,或者是否应该被生成。
.PHONY后面声明的是伪目标。
主makefile 子makefile
直接加路径前缀进去编译,并且将.o文件统一生成到makefile同级的某个目录下,最后链接该目录下的所有.o.
*makefile*中*调用*其他*makefile*
2021-06-18 10:02:55
看到一个将多个makefle文件汇总到一个makefile里的方法,记录一下,希望以后能用到。
步骤1:首先指定子makefile的路径
sub_makefile := $(wildcard $(DIR)/XXX/*/makefile)
*表示匹配XXX目录下的所有文件夹
步骤2:遍历所有makefile
all_makefiles = $(foreach n, $(sub_makefile), $(n))
步骤3:include到父makefile