11 make
这段代码摘自 GNU makefile 手册的第 8.6 章。
makefile 中文件函数 arg 的 @$@.in 是什么意思?以及为什么像 rm 这样的 shell 命令以“@”符号为前缀
program: $(OBJECTS)
$(file >$@.in,$^)
$(CMD) $(CMDFLAGS) @$@.in
@rm $@.in
Run Code Online (Sandbox Code Playgroud)
文件函数语法是
$(file op filename[,text])
Run Code Online (Sandbox Code Playgroud)
Gil*_*il' 13
这里有三个不相关的用法@
。
在 中$@
,字符@
是可以在规则中使用的自动变量的名称。该变量的值是规则正在构建的目标。
当@
在配方(命令)行的最开始使用时,就在制表符之后,它会导致命令在即将执行时不打印。
@
其他地方的角色并不特别。
因此,在您的示例中,要构建program
:
file
函数被调用。它将目标($^
自动变量)的依赖项写入文件program.in
。执行存储在变量中的任何命令CMD
,参数存储在变量中CMDFLAGS
,加上额外的参数@program.in
。这做什么取决于是什么CMD
。
命令rm program.in
被执行,而不先打印它。
一些命令将开头的参数@
视为指示要从中读取更多参数的文件。这是 DOS 约定的产生,因为 DOS 对命令行长度有严格的限制,并且无法将命令的输出插入到命令行中。这在 Unix 世界中并不常见,因为 Unix 没有这些限制。因此,配方的效果可能与
$(CMD) $(CMDFLAGS) $(OBJECTS)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10242 次 |
最近记录: |