如果语句不正确,我试图在ifdef语句上获取退出代码,但我尝试使用exit 1和$(call exit 1)
在下面的代码中使用第一个时,我得到“Makefile:11: * 缺少分隔符。停止。”
...
ifdef PACKAGE
PACKAGEDIR = $(HOME)/$(PACKAGE)
else
exit 1
endif
...
通过使用$(call exit 1)
我没有得到任何错误,但makefile仍然继续执行。
我想要完成的是在else上退出Makefile,错误代码为1
由于
答案 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))