某个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手册中没有找到任何相关内容,也许我不知道搜索它的正确关键字。
答案 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]
[]
制作定义中的分配符号不是分配,它们只是定义中的字符。