强制退出Makefile目标而不引发错误

时间:2013-11-04 17:34:25

标签: netbeans makefile

我使用外部工具(Netbeans)生成的Makefile,我无法更改主目标的逻辑,但我能够在实际构建之前执行的目标中“注入”逻辑(。 build-pre在Netbeans生成的Makefile中是特定的)

我希望该目标有条件地终止make执行,但不会引发错误。如果我做

exit

在“预”规则内,没有任何反应(我的意思是,规则终止,但继续)。如果我添加

exit 1

make将终止,但它将返回错误状态。

有没有办法强制make以干净的方式退出?我搜索了make函数,但发现只有error / warn / info,但没有像exit一样。

提前致谢!

编辑:基于评论似乎不可能。可怜。

为了完整性,我想要实现的更具体的例子:

default: pre
  @echo "Doing default"

pre: 
  @echo "Doing pre"
ifeq "$(SOME_VARIABLE)" "yes"
  exit 0
fi

使用上面的Makefile,我希望能够执行pre,并有条件地阻止'default'执行,但仍然返回0到shell。

3 个答案:

答案 0 :(得分:16)

如果未设置变量,您可以让所有目标无效:

ifeq ($(SOME_VAR),)
$(info SOME_VAR not set!)
all:
else
all: target1 target2 targetetc
endif

答案 1 :(得分:2)

只是扩大@ Ken的优秀回应。你也可以这样做:

ifeq ("test", "test")
postinstall:
    @echo "test = test"
else
postinstall:
    @echo "test != test"
endif

答案 2 :(得分:0)

您所看到的发生是因为配方中的每一行都在自己的 shell 中运行。

您可以使用 .ONESHELL,以便所有命令都在同一个 shell 中运行。这样,“退出”就起作用了:

.ONESHELL:

sayhi:
    @echo Hi
    exit
    @echo Bye