GNU makefile中同一行上的两个赋值

时间:2016-03-03 17:17:37

标签: makefile gnu-make

某个makefile(即OCaml 4.2发行版中的otherlibs / num / Makefile)包含以下行:

EXTRACFLAGS=-DBNG_ARCH_$(BNG_ARCH) -DBNG_ASM_LEVEL=$(BNG_ASM_LEVEL)

我很惊讶在这里看到同一行的两个作业。这是什么意思 ?是否与

相同
EXTRACFLAGS=-DBNG_ARCH_$(BNG_ARCH)
-DBNG_ASM_LEVEL=$(BNG_ASM_LEVEL)

我在GNU make手册中没有找到任何相关内容,也许我不知道搜索它的正确关键字。

1 个答案:

答案 0 :(得分:3)

这里没有两项任务。该行指定了定义:

-DBNG_ARCH_$(BNG_ARCH) -DBNG_ASM_LEVEL=$(BNG_ASM_LEVEL)

到make变量EXTRACFLAGS。该值似乎包含在内 要传递给C预处理器的某些调用的标志 定义宏BNG_ARCH_$(BNG_ARCH)BNG_ASM_LEVEL。例如。如 在制作食谱中:

    $(CPP) $(EXTRACFLAGS) ...

其中,假设作品分配:

BNG_ARCH = foo
BNG_ASM_LEVEL = bar

将扩展为:

    cpp -DBNG_ARCH_foo -DBNG_ASM_LEVEL=bar ...

OP评论

  

所以你可能会说=是"左关联",最左边=符号是真正被执行的那个。这是在手册的某处记录的吗?

从我频繁但非详尽的度假胜地到手册,我无法说出 记录。谁 可能知道的更好。那里没有正式的语法,但无处不在说明变量的定义是从 在=:=?=之后的非空格文本的开头(可能是\ - 扩展) 逻辑线。您可以通过运行makefile来满足要点:

.PHONY: all

x = X y = Y

all:
    @echo [$(x)]
    @echo [$(y)]

打印:

[X y = Y]
[]

制作定义中的分配符号不是分配,它们只是定义中的字符。