只需扩展变量的$(MAKEFLAGS)行为

问题描述 投票:1回答:1

我无法理解$(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 ...)看到它的值

makefile gnu-make
1个回答
0
投票

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

那么为何不?粗略地说,“简单分配”意味着右侧的价值将在原地扩大,直到找不到更多的$。因此,您可以将任何内容分配给“简单”变量。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.