$(MAKEFLAGS)具有简单扩展变量的行为

时间:2019-04-08 22:04:53

标签: makefile gnu-make

我无法理解$(MAKEFLAGS)变量的行为。为了解释我想说的话,我写了一个非常简单的makefile:

$(info *** $(MAKEFLAGS))
STRING := $(MAKEFLAGS)
all:
    echo MAKEFLAGS=$(MAKEFLAGS)
    echo STRING=$(STRING)

在命令行中使用一些变量运行make:

$ make DEBUG=1 INST=/tmp
*** 
echo MAKEFLAGS= -- INST=/tmp DEBUG=1
MAKEFLAGS= -- INST=/tmp DEBUG=1
echo STRING=
STRING=

我想知道如何将$(MAKEFLAGS)分配给一个简单的扩展变量(带有:=),为什么我不能用$(info ...)看到它的值

1 个答案:

答案 0 :(得分:0)

  

我想知道如何将$(MAKEFLAGS)分配给简单扩展的变量(使用:=)

为什么不呢?粗略地说,“简单赋值”意味着右侧的值将就位扩展,直到找不到更多的$为止。因此,您几乎可以将任何东西分配给“简单”变量。

  

为什么我不能用$(info ...)看到它的值

可以看到,它是空的。至少,在预处理makefile的“ body”时它是空的(这也是为什么STRING总是空的-它在第2行是MAKEFLAGS的值),尽管扩大食谱。嗯,毕竟这是一个特殊的变量。