0

我正在学习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”,因为 $(surname) 最后是“Lin”。

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

此外,为什么第一个回显消息(“没有包”)不会打印,而只有错误消息呢?

谢谢老师。

4

1 回答 1

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

  2. ALL_PACKAGES在解析的那个点是空的,所以这就是你得到这个结果的原因。在ifeq解析 makefile 时处理,在它实际开始运行和构建目标之前。

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

  4. 如果您要注释掉该$(error行,您将得到两个打印输出make hello1- 两个是There is no package消息(由于ALL_PACKAGES解析中当时的状态而包含在内),然后是在实际处理过程package1中稍后被扩展。$(ALL_PACKAGES)make

于 2013-04-17T17:31:02.590 回答