Please enable JavaScript.
Coggle requires JavaScript to display documents.
make项目管理 (规则 (特殊工作目标 (.PHONY 不代表一个实际的文件,而应该被视为尚未更新, .SUFFIXES 指定旧式的后缀规则, …
make项目管理
规则
具体规则
假想工作目标
[gnu make提供一个特殊工作目标.PHONY作为告诉make哪些标签不是真正文件,而是假想工作目标,如:.PHONY: clean
假想工作目标总是尚未更新,所以总是被执行,且总会使它们的依存对象被重建
空工作目标
可用来标明最近发生了一个特殊的事件
模式出现在工作目标或必要条件中,是由make进行通配符的扩展,其会在make读取makefile时立即扩展通配符
模式出现在命令中时,是由subshell进行扩展的动作,其只会在执行命令时扩展通配符
模式规则
make存在的三项内置规则
%.o: %.c
$(COMPILE.c) $(OUTPUT_OPTION) $<
%.c: %.l
$(RM)
$@
$(LEX.l) $< > $@
%: %.c
$(LINK.c) $^ $(LOADLIBES) $(LDLIBS) -o $@
make --print-data-base查看make具有哪些默认规则
模式
隐含规则
隐含规则的使用
规则的结构
后缀规则
如:
.p:
$(LINK.p) $^ $(LOADLIBES) $(LDLIBS) -o $@
等效于:
%: %.p
$(LINK.p) $^ $(LOADLIBES) $(LDLIBS) -o $@
静态模式规则
如:$(OBJECTS): %.o: %.c
$(CC) -c $(CFLAGS) $< -o $@
变量
命名: VARIABLE-NAME=XXXX
使用:$() 或 ${}将变量名称括住,除非是单个字符,则不需要圆括号
自动变量
$@ 工作目标的文件名
$% 档案文件成员结构中的文件名元素
$< 第一个必要条件的文件名
$? 时间戳在工作目标(的时间戳)之后的所有必要条件,并以空格隔开这些必要条件
$^ 所有必要条件的文件名,并以空格隔开这些文件名。且不会出现重复文件名
$+ 如同$^,代表所有必要条件的文件名,并以空格隔开这些文件名,区别是,$+包含重复的文件名
$* 工作目标的主文件名,文件名称由两部分组成:主文件名和扩展名
另一种变体,如:$(<D)、$(
D)等,表示只返回值的目录部分
还有一种变体,如:$(<F)、$(
F)等,加字母F的,表示只返回值的文件部分
变量只能应用在规则的命令脚本部分,因为make会在它的工作目标和必要条件相符之后设定自动变量
以VPATH和vpath来查找文件
VPATH=src 表示如果make所需目标文件和必要条件并未放在当前目录下,就应该到哦src目录下找,多个目录请使用空格或者冒号隔开(windows用户应用空格和分号隔开)
vpath指令可以用于匹配某个目录下的文件搜索规则,具体的规则如下:vpath pattern directory-list
vpath %.l %.c src
vpath %.h include
特殊工作目标
.PHONY 不代表一个实际的文件,而应该被视为尚未更新
.SUFFIXES 指定旧式的后缀规则
.SECONDARY 常用来标识存储在程序库里的目标文件
.PRECIOUS 用来标示make在运行时发生错误,不删除目标文件
.DELETE_ON_ERROR 其作用刚好和.PRECIOUS相反
.INTERMEDIATE 如果make在更新另一个工作目标期间创建了该文件,则该文件将会在make运行结束时自动删除,如果在make想要更新该文件已经存在了,则该文件不会被删除
自动产生依存关系
基本概念
Makefile的基本语法
调用make
工作目标与必要条件
检查依存关系
变量与宏