使args:是否存在包含所有变量的变量?

时间:2019-06-26 21:24:48

标签: makefile gnu-make

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或某个变量?

2 个答案:

答案 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可以消除多余的空格。