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



我无法理解$(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 ...)

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

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

为什么我看不到它的价值与 $(信息...

确实看到了它,它是空的。至少,在预处理 makefile 的"正文"时它是空的(这也是为什么STRING总是空的 - 它是 #2 行上的 MAKEFLAGS 值(,尽管它在扩展配方时不为空。嗯,这毕竟是一个特殊的变量。

最新更新