我正在尝试将make变量的值转储到文件中以供进一步处理。
到目前为止,我已经能够使用以下规则将值打印到命令行:
print-%:
@echo '$*=$($*)'
使用命令行调用
make print-VAR
我真的不希望它在stdout上,而是打印到文件中。 GNU Make“file”函数看起来像我应该使用的东西: http://www.gnu.org/software/make/manual/html_node/File-Function.html#File-Function
该页面立即跳转到一个复杂的例子中,所以我实现了以下但似乎无法使它工作:它将@echo打印到stdout,但是当我查看我的目录时没有output.txt文件。
printf-%:
@echo '$*=$($*)'
$(file > output.txt,$($*))
我错过了什么?
编辑:好吧,看起来我可以使用@echo '$($*)' > output.txt
做我想做的事,但这仍然无法解释为什么我的文件调用无效。
答案 0 :(得分:7)
评论部分的两个回复:
1)要获得所需的功能,只需将“@echo”语句重定向到文件
即可printf-%:
@echo '$*=$($*)' > output.txt
2)文件功能不起作用的原因是它是Make v4.0和更新版本的功能,而不是3.8,这是我使用的版本。
答案 1 :(得分:0)
你可以在make到shell中运行任何东西之前打印出变量。这给了你所有这些(好吧,除了名字中有空格的那些)
$(foreach _,${.VARIABLES},$(info $_ is $(flavor $_) with value [$(value $_)] which expands to [$_]))
给
$ make
GNUMAKEFLAGS comes from the [environment] and is simple with value [] which expands to []
<D comes from the [automatic] and is recursive with value [$(patsubst %/,%,$(dir $<))] which expands to []
?F comes from the [automatic] and is recursive with value [$(notdir $?)] which expands to []
⋮
这通常很重要,因为变量可以在解析makefile时发生变化。