我正在使用此代码段获取所有 makefile 变量和值:
.PHONY: test
test:
$(foreach v, \
$(filter-out $(VARS_OLD) VARS_OLD,$(.VARIABLES)), \
$(info $(v) = $($(v))))
但我想将此输出写入文件。
以下均无效:
...$(info $(v) = $($(v)))) > myfile.txt
...$(info $(v) = $($(v))) >> myfile.txt)
ALL_MAKEFILE_VARS:; $(foreach v, $(filter-out $(VARS_OLD) VARS_OLD,$(.VARIABLES)), $(info $(v)=$($(v))))
.PHONY: test
test:
$(file > myfile.txt,$(ALL_MAKEFILE_VARS))
echo -e $(foreach v, $(filter-out $(VARS_OLD) VARS_OLD,$(.VARIABLES)), $(info $(v)=$($(v)))) > derp.txt
打印它们非常容易,我只想将该输出重定向到一个文件。
你不能这样做,因为
$(info ...)
是一个 make 功能,而 >
重定向是一个 shell 功能。当 make 运行一个配方时,它首先会展开配方,展开所有 make 宏和函数,然后将结果字符串传递给 shell 以运行。
因此,
info
函数全部由 make 调用,并始终按照定义的方式写入标准输出,并按照定义的方式扩展为空字符串,然后生成配方(只是重定向) 传递给 shell.
如果你想使用 shell 重定向,你必须使用 shell 命令。例如:
.PHONY: test
test:
( $(foreach v, \
$(filter-out $(VARS_OLD) VARS_OLD,$(.VARIABLES)), \
echo '$(v) = $($(v))'; ) ) > myfile.txt
注意我实际上并没有尝试这个。
或者,如果你有一个“足够新”的 GNU Make 版本,你可以研究
$(file ...)
功能。