make args: 是否有包含所有参数的变量?
Make args: is there a variable that contains all of them?
在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
或沿这些线定义为 make
环境的一部分的一些变量?
有一个 special variable 就是为了这个:
echo-vars:
echo ${MAKEOVERRIDES}
.VARIABLES 有点接近。
这仅打印 command-line 个变量:
test:
echo "$(foreach VAR_NAME,$(.VARIABLES),\
$(if $(filter command line,$(origin $(VAR_NAME))),$(VAR_NAME)))"
如果 $(filter command line,$(origin VAR_NAME))
是 $(origin VAR_NAME)
的值,则它等于 "command line"
,否则为空。 $(filter <needle>,<haystack>)
是 make
对 "<needle> is in or equals to <haystack> and is not empty"
的布尔测试。
$(if <condition>,<value>)
returns <value>
如果 <condition>
非空,否则为空字符串。
$(foreach VAR_NAME,SET,EXPRESSION)
returns EXPRESSION
的合并结果应用于 (space-separated) SET
的每个元素,其中 VAR_NAME
是替换为 SET
. 的每个元素
添加 $(strip)
以去除多余的空格。
在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
或沿这些线定义为 make
环境的一部分的一些变量?
有一个 special variable 就是为了这个:
echo-vars:
echo ${MAKEOVERRIDES}
.VARIABLES 有点接近。
这仅打印 command-line 个变量:
test:
echo "$(foreach VAR_NAME,$(.VARIABLES),\
$(if $(filter command line,$(origin $(VAR_NAME))),$(VAR_NAME)))"
-
如果
$(filter command line,$(origin VAR_NAME))
是$(origin VAR_NAME)
的值,则它等于"command line"
,否则为空。$(filter <needle>,<haystack>)
是make
对"<needle> is in or equals to <haystack> and is not empty"
的布尔测试。$(if <condition>,<value>)
returns<value>
如果<condition>
非空,否则为空字符串。$(foreach VAR_NAME,SET,EXPRESSION)
returnsEXPRESSION
的合并结果应用于 (space-separated)SET
的每个元素,其中VAR_NAME
是替换为SET
. 的每个元素
添加 $(strip)
以去除多余的空格。