GNU make 的 "file" 函数如何工作?
How does GNU make's "file" function work?
我在想我可能需要使用GNU make中的文件功能,只是不能按照他们给出的例子去做。我在网上看过,但没有看到任何 post 有更多解释。这是他们给出的例子:
program: $(OBJECTS)
$(file >$@.in,$^)
$(CMD) $(CMDFLAGS) @$@.in
@rm $@.in
我想我知道它在高层次上做了什么,正如手册中所解释的那样。
$@.in
是所有目标文件的列表
$^
是源文件列表
我不清楚第三行的@$@.in
是怎么用的,也不知道开头的@
是什么符号。请问这是什么意思?它应该做什么?
该配方操作的关键在the manual之前的散文中给出:
Many commands use the convention that an argument prefixed with an @ specifies a file containing more arguments. Then you might write your recipe in this way:
program: $(OBJECTS)
$(file >$@.in,$^)
$(CMD) $(CMDFLAGS) @$@.in
@rm $@.in
$@
是目标文件(任何给定的配方中只有一个)
$@.in
是在文件名末尾加上.in
的目标文件。
$^
是目标所有先决条件的"list"。
@$@.in
是以.in
结尾,@
开头的目标名称。
因此,该配方中的 $(file ...)
调用将目标的先决条件列表写入 "overwrite" 模式下名为 program.in
的文件,然后将该文件名传递给 $(CMD)
命令使用提到的 @filename
约定。
我在想我可能需要使用GNU make中的文件功能,只是不能按照他们给出的例子去做。我在网上看过,但没有看到任何 post 有更多解释。这是他们给出的例子:
program: $(OBJECTS)
$(file >$@.in,$^)
$(CMD) $(CMDFLAGS) @$@.in
@rm $@.in
我想我知道它在高层次上做了什么,正如手册中所解释的那样。
$@.in
是所有目标文件的列表
$^
是源文件列表
我不清楚第三行的@$@.in
是怎么用的,也不知道开头的@
是什么符号。请问这是什么意思?它应该做什么?
该配方操作的关键在the manual之前的散文中给出:
Many commands use the convention that an argument prefixed with an @ specifies a file containing more arguments. Then you might write your recipe in this way:
program: $(OBJECTS) $(file >$@.in,$^) $(CMD) $(CMDFLAGS) @$@.in @rm $@.in
$@
是目标文件(任何给定的配方中只有一个)$@.in
是在文件名末尾加上.in
的目标文件。$^
是目标所有先决条件的"list"。@$@.in
是以.in
结尾,@
开头的目标名称。
因此,该配方中的 $(file ...)
调用将目标的先决条件列表写入 "overwrite" 模式下名为 program.in
的文件,然后将该文件名传递给 $(CMD)
命令使用提到的 @filename
约定。