Filter 如何将筛选后的Makefile变量列表转储到文件中?

Filter 如何将筛选后的Makefile变量列表转储到文件中?,filter,makefile,Filter,Makefile,我想将所有以MYLIB\ucode>开头的Makefile变量及其值作为预处理器定义转储到名为config.h的文件中。这就是我尝试过的: config: @echo "// AUTO-GENERATED - DO NOT EDIT!" > config.h $(foreach V, $(filter MYLIB_%, $(.VARIABLES)), $(shell echo "#define $(V) $($V)" >> config.h))

我想将所有以
MYLIB\ucode>开头的Makefile变量及其值作为预处理器定义转储到名为
config.h
的文件中。这就是我尝试过的:

config:
    @echo "// AUTO-GENERATED - DO NOT EDIT!" > config.h
    $(foreach V, $(filter MYLIB_%, $(.VARIABLES)),
        $(shell echo "#define $(V) $($V)" >> config.h))
不幸的是,
$(filter)
不返回任何值,即使
$(.VARIABLES)
包含以
MYLIB
开头的项

我做错了什么?

您的
$(过滤器)
看起来正确。 原因可能是
@echo
命令之间的求值顺序 和
$(foreach)
。 是否将
@echo
替换为
$(shell echo…
如下所示 解决问题

config:
    $(shell echo "// AUTO-GENERATED - DO NOT EDIT!" > config.h) \
    $(foreach V, $(filter MYLIB_%, $(.VARIABLES)), \
        $(shell echo "#define $(V) $($V)" >> config.h))
您的
$(过滤器)
看起来正确。 原因可能是
@echo
命令之间的求值顺序 和
$(foreach)
。 是否将
@echo
替换为
$(shell echo…
如下所示 解决问题

config:
    $(shell echo "// AUTO-GENERATED - DO NOT EDIT!" > config.h) \
    $(foreach V, $(filter MYLIB_%, $(.VARIABLES)), \
        $(shell echo "#define $(V) $($V)" >> config.h))