Makefile简单教程
基础规则
一个简单的 Makefile 文件包含一系列的“规则”,其样式如下:
目标(target)…: 依赖(prerequiries)…
<tab>命令(command)
如果“依赖文件”比“目标文件”更加新,那么执行“命令”来重新生成“目标文件”。命令被执行的 2 个条件:依赖文件比目标文件新,或是 目标文件还没生成
Makefile的两个函数
A. $(foreach var,list,text) 简单地说,就是 for each var in list, change it to text。 对 list 中的每一个元素,取出来赋给 var,然后把 var 改为 text 所描述的形式。
例子:
objs := a.o b.o
dep_files := $(foreach f, $(objs), .$(f).d) // 最终 dep_files := .a.o.d .b.o.d
B. $(wildcard pattern) pattern 所列出的文件是否存在,把存在的文件都列出来。 例子:
src_files := $( wildcard *.c) // 最终 src_files 中列出了当前目录下的所有.c` 文件
wildcard 用来明确表示通配符。wildcard 也可以用来匹配变量。
参考文章:(9条消息) wildcard 的理解_Simon_CB_Zhao的博客-CSDN博客_wildcard
一步步完善Makefile
第 1 个 Makefile,简单粗暴,效率低:
test : main.c sub.c sub.h
gcc -o test main.c sub.c
第 2 个 Makefile,效率高,相似规则太多太啰嗦,不支持检测头文件: