我可以在规则之外使makefile中止吗?

时间:2017-12-31 05:15:32

标签: makefile gnu-make

在我的Makefile顶部,在任何规则之前,我有以下内容:

ifeq ($(ENVIRONMENT),LOCAL)
    TARGET := local_target
else
    TARGET := hello
endif

如果未设置ENVIRONMENT环境变量,或设置为LOCAL以外的值,而不是将TARGET设置为hello,我希望makefile为停止并以-1退出。

我能这样做吗?当我将TARGET := hello更改为exit -1时,我收到以下错误:

Makefile:4: *** missing separator.  Stop.

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:3)

exit是一个shell命令,因此您可以使用Makefile中的shell assignment operator(即:!=)来调用exit

TARGET != exit -1

这实际上相当于:

TARGET := $(shell exit -1)

再次注意,这会调用一个shell,它依次运行shell exit内置的,即:它不会退出make。处理makefile时退出的典型方法是调用GNU Make的error内置函数:

$(error Error-message-here)

把所有东西放在一起:

ifeq ($(ENVIRONMENT),LOCAL)
 TARGET := local_target
else # indent with spaces, not a tab
 $(error ENVIRONMENT not set to LOCAL)
endif