在Makefile中扩展变量值

时间:2013-04-17 17:27:22

标签: makefile

我正在学习一些Makefile的基础知识,并编写如下的简单示例:

urname=Chang
givenname=SJ
fullname=$(givenname) $(surname)
hello:
    @echo $(fullname)

surname=Lin

ALL_PACKAGES=
hello1:
ifeq (,$(ALL_PACKAGES))
    @echo There is no package
    $(error $(ALL_PACKAGES) is empty)
else
    @echo there are some packages
endif
    @echo $(ALL_PACKAGES)

ALL_PACKAGES += package1

我能理解make hello结果将是“SJ Lin”,因为$(姓氏)最终是“林”。

然而,在make hello1的结果中,为什么$(ALL_PACKAGES)在if条件中为空(我想在make hello上以相同的方式将是“package1”)?

此外,为什么第一条回音信息(“没有包裹”)不会被打印,只会出现错误信息?

感谢老师。

1 个答案:

答案 0 :(得分:1)

  1. make hello将产生“Jay Lin”,而不是“SJ Lin”。我不知道你从哪里得到“SJ”。

  2. ALL_PACKAGES在解析中的那一点是空的,这就是你得到那个结果的原因。 ifeq在解析makefile时处理,然后才真正开始运行并构建目标。

  3. 在开始运行和构建目标之前,错误消息在解析makefile时打印出来(导致make退出)。

  4. 如果您要对$(error行发表评论,则会从make hello1获得两次打印输出 - There is no package消息(因ALL_PACKAGES状态而包含1}}在解析中的那一点),然后package1,在$(ALL_PACKAGES)处理的实际make处理过程中,{{1}}稍后展开。