makefile 使用指令

使用函数

例如定义函数 remove_quote=$(patsubst "%",%,$(1))
将进来参数去掉引号。
使用时out = $(remove_quote,$(test))

filter-out

$(filter-out pattern,text)
过滤掉字串“TEXT”中所有符合模式“PATTERN”的单词,保留所有不符合此模式的单词。可以有多个模式。存在多个模式时,模式表达式之间使用空格分割。可以用来去除一个变量中的某些字符串。

patsubst

\((patsubst pattern,replacement,text) 查找text中的单词(单词以空格、Tab或回车分隔)是否符合模式pattern,如果匹配的话,则以replacement替换。 pattern可以包括通配符“%”,表示任意长度的字串。如果replacement中也包含“%”,那么,replacement中的这个%将是pattern中的那个%所代表的字串。 例如`obj=\)(patsubst %.c,%.o,$(dir))`

wildcard

明确表示通配符,或者验证某个路径文件是否存在。src = $(wildcard *.c)这里明确表示*作为匹配任意字符。此外,src = $(wildcard 不存在的路径)返回的src为空。

include

make 在处理程序的时候,文件列表中的任意一个文件不存在的时候或者是没有规则去创建这个文件的时候,make 程序将会提示错误并保存退出;

-include

当包含的文件不存在或者是没有规则去创建它的时候,make 将会继续执行程序,只有真正由于不能完成终极目标重建的时候我们的程序才会提示错误保存退出;

等于

使用等号a=b时,make会将整个makefile展开后,由b的值决定变量的值。也就是说,变量的值将会是整个makefile中最后被指定的值。
如果使用a:=b时,make会在运行到makefile该位置时,由b的值决定变量的值。
= 是最基本的赋值
:= 是覆盖之前的值
?= 是如果没有被赋值过就赋予等号后面的值
+= 是添加等号后面的值
参考链接

@

表示命令不回显。

自动变量

\(@:目标 \)^:所有目标依赖
\(<:目标依赖列表中的第一个依赖 \)?:所有目标依赖中被修改过的文件

执行顺序

make没有参数时表示最终target为最终目标。也可以指定,make run将run设为最终目标。

.PHONY

表示字符并不是文件名,常作为调用
.PHONY:all run表示all run只是单纯的目标名称,如果文件夹下存在all文件,all文件也与这个all没关系。
会继续进入all:后面执行命令。
pdf文件下载

输出信息

使用echo输出时比较麻烦,可以使用$(info ...)查看想查看的信息。

posted @ 2023-02-28 15:15  心比天高xzh  阅读(107)  评论(0)    收藏  举报