标签:包含 out fun 结束 UNC pwd flag shell 变量
等号的使用
= 递归扩展
:= 简单扩展
?= 未定义则赋值
字符串处理
$(var:suffix=replacement) 替换,等效于:$(patsubst %suffix,%replacement,$(var))
$(foo:%.o=%.c)
override VARIABLE = VALUE
如果不希望命令行指定的变量值替代在Makefile中的变量定义,那么我们需要在Makefile中使用指示符“override”来对这个变量进行声明
一些内置特殊变量
MAKECMDGOALS 即make的target。
CURDIR, PWD 举例:cd a; make -C b; means: CURDIR=b, PWD=a
$@ 扩展成当前规则的目标名,
$^ 扩展成整个依赖列表(除掉了里面所有重复的文件名)
$?比目标文件(target)新的dependent file.而$?的值只有在使用外显示(explicit)的规则时才会被设定.
$*是内存dependent file的文件名,不含扩展名.
Shell定义的特殊变量
$#: 内存位置参数的个数
$$: 该shell script的进程代号(pid)
隐含规则
$(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c $< -o $@
假象目标
告诉 make 不用检查它们是否存在于磁碟上,也不用查找任何隐含规则,直接假设指定的目的需要被更新。在 makefile 里加入下面这行包含上面规则的规则:
.PHONY : veryclean
用一个 $ 符号跟开括号,函数名,空格后跟一列由逗号分隔的参数,最后 用关括号结束。
例如,在 GNU Make 里有一个叫 ‘wildcard‘ 的函数,它有一个参数,功能是展开成一列所有符合由其参数描述的文件名,文件间以空格间隔。你可以像下面所示使用这个命令:
SOURCES = $(wildcard *.c)
另一个有用的函数是 patsubst ( patten substitude, 匹配替换的缩写)函数。它需要3个参数——第一个是一个需要匹配的 式样,第二个表示用什么来替换它,第三个是一个需要被处理的 由空格分隔的字列。例如,
OBJS = $(patsubst %.c,%.o,$(SOURCES))
‘filter-out‘ 函数使用两个用空格分开的列表,它把第二列表中所有的存在于第一列表中的项目删除。我用它来处理 DEPS 列表,把所有已经存在的项目都删除,而只保留缺少的那些。
其他
如果 CPPFLAGS 指定了 -MD , 它的 .d 文件也被重新产生。
如果make命令后不带参数,即不指定目标,则默认使用makefile中发现的第一个目标,但不包括带有通配符(%)的目标。
在一条规则中,将忽略空行(只含有空格或制表符),而命令行必须以制表符为起始字符,忽略起始制表符与命令中间的空格和制表符。
makefile
标签:包含 out fun 结束 UNC pwd flag shell 变量
原文地址:https://www.cnblogs.com/realplay/p/9648800.html