使用Make的文件功能

时间:2014-05-08 17:28:39

标签: makefile gnu-make

我正在尝试将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

做我想做的事,但这仍然无法解释为什么我的文件调用无效。

2 个答案:

答案 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时发生变化。