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

问题描述 投票:2回答:1

在我的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.

我怎么能做这个工作?

makefile gnu-make
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.