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) 以去除多余的空格。