在make
中,我可以如下定义文件:
.PHONY: echo-foo
echo-foo:
echo ${foo}
用法:
make echo-foo foo=foo
现在,我想执行以下操作:
make echo-vars foo=foo bar=bar
我首先写:
echo-vars:
echo ${???}
是否有一个自动定义的变量将输出:
// either
foo=foo bar=bar
// or
foo bar
换句话说:在定义为MAKEARGS
env一部分的那行上是否有make
或某个变量?
答案 0 :(得分:2)
有一个special variable就是为了这个目的:
echo-vars:
echo ${MAKEOVERRIDES}
答案 1 :(得分:1)
.VARIABLES有点接近。
这仅打印命令行变量:
test:
echo "$(foreach VAR_NAME,$(.VARIABLES),\
$(if $(filter command line,$(origin $(VAR_NAME))),$(VAR_NAME)))"
$(filter command line,$(origin VAR_NAME))
等于"command line"
的值,则等于$(origin VAR_NAME)
,否则为空。 $(filter <needle>,<haystack>)
是make
对"<needle> is in or equals to <haystack> and is not empty"
的布尔测试。$(if <condition>,<value>)
是非空的,<value>
返回<condition>
,否则为空字符串。$(foreach VAR_NAME,SET,EXPRESSION)
返回一个EXPRESSION
的联合结果,该结果应用于(以空格分隔)SET
的每个元素,其中VAR_NAME
被{{ 1}}。添加SET
可以消除多余的空格。