在Makefile if语句上获取退出代码1

时间:2012-04-24 05:22:57

标签: makefile exit-code

如果语句不正确,我试图在ifdef语句上获取退出代码,但我尝试使用exit 1和$(call exit 1)

在下面的代码中使用第一个时,我得到“Makefile:11: * 缺少分隔符。停止。”

...

ifdef PACKAGE
    PACKAGEDIR = $(HOME)/$(PACKAGE)
else
    exit 1
endif

...

通过使用$(call exit 1)我没有得到任何错误,但makefile仍然继续执行。 我想要完成的是在else上退出Makefile,错误代码为1

由于

2 个答案:

答案 0 :(得分:4)

正如geekosaur所说,你不能把像exit 1这样的shell命令作为makefile操作。 Makefile不是shell脚本,尽管它们可以包含 shell脚本。 Shell命令只能出现在目标配方中,而不能出现在其他地方。

如果你有一个足够新版本的GNU make,你可以使用$(error ...)函数,如下所示:

ifdef PACKAGE
    PACKAGEDIR = $(HOME)/$(PACKAGE)
else
    $(error You must define the PACKAGE variable)
endif

另请注意,如果定义了变量,ifdef将为真,即使它被定义为空字符串。您可能更喜欢:

ifneq ($(PACKAGE),)
    PACKAGEDIR = $(HOME)/$(PACKAGE)
else
    $(error You must define the PACKAGE variable)
endif

确保将变量设置为非空值。

而且,你的GNU make版本可能太旧而无法支持$(error ...)函数,尽管它已经存在很长时间了。

答案 1 :(得分:0)

你不能简单地将裸代码粘贴在Makefile中的某个地方;代码(例如exit 1)始终与某种构建规则相关联。

在这种情况下,您需要$(error) function。但是,将它放在else中可能还不够,因为exit 1本身不会在那里工作;你可能需要将整个事情改写为

PACKAGEDIR := $(if $(flavor PACKAGE),undefined,$(error PACKAGE must be defined!),$(HOME)/$(PACKAGE))