如何将所有 makefile 变量和值写入文件?

问题描述 投票:0回答:1

我正在使用此代码段获取所有 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

打印它们非常容易,我只想将该输出重定向到一个文件。

makefile
1个回答
0
投票

你不能这样做,因为

$(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 ...)
功能。

© www.soinside.com 2019 - 2024. All rights reserved.