标签:应该 导出 函数 列表 除了 命令 make https win
参考链接:https://seisman.github.io/how-to-write-makefile/implicit_rules.html#id8
所谓自动化变量,就是这种变量会把模式中所定义的一系列的文件自动地挨个取出,直至所有的符合模式的文件都取完。这种自动化变量只应出现在规则的命令中。
下面是所有的自动化变量及其说明:
$@
: 表示规则中的目标文件集。在模式规则中,如果有多个目标,那么, $@
就是匹配于目标中模式定义的集合。$%
: 仅当目标是函数库文件中,表示规则中的目标成员名。例如,如果一个目标是 foo.a(bar.o)
,那么, $%
就是 bar.o
, $@
就是 foo.a
。如果目标不是函数库文件(Unix下是 .a
,Windows下是 .lib
),那么,其值为空。$<
: 依赖目标中的第一个目标名字。如果依赖目标是以模式(即 %
)定义的,那么 $<
将是符合模式的一系列的文件集。注意,其是一个一个取出来的。$?
: 所有比目标新的依赖目标的集合。以空格分隔。$^
: 所有的依赖目标的集合。以空格分隔。如果在依赖目标中有多个重复的,那么这个变量会去除重复的依赖目标,只保留一份。$+
: 这个变量很像 $^
,也是所有依赖目标的集合。只是它不去除重复的依赖目标。$*
: 这个变量表示目标模式中 %
及其之前的部分。如果目标是 dir/a.foo.b
,并且目标的模式是 a.%.b
,那么, $*
的值就是 dir/a.foo
。这个变量对于构造有关联的文件名是比较有较。如果目标中没有模式的定义,那么 $*
也就不能被推导出,但是,如果目标文件的后缀是make所识别的,那么 $*
就是除了后缀的那一部分。例如:如果目标是 foo.c
,因为 .c
是make所能识别的后缀名,所以, $*
的值就是 foo
。这个特性是GNU make的,很有可能不兼容于其它版本的make,所以,你应该尽量避免使用 $*
,除非是在隐含规则或是静态模式中。如果目标中的后缀是make所不能识别的,那么 $*
就是空值。标签:应该 导出 函数 列表 除了 命令 make https win
原文地址:https://www.cnblogs.com/wangha/p/13294408.html