23

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

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

exit

在“pre”规则中,什么也没有发生(我的意思是,规则终止,但 make 继续)。如果我添加

exit 1

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

有没有办法强制 make 以干净的方式退出?我搜索了make函数,但只找到了错误/警告/信息,但没有像exit这样的。

提前致谢!

编辑:根据评论,这似乎是不可能的。遗憾。

为了完整起见,我想实现一个更具体的例子:

default: pre
  @echo "Doing default"

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

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

4

3 回答 3

22

如果未设置变量,您可以让 all 目标不执行任何操作:

ifeq ($(SOME_VAR),)
$(info SOME_VAR not set!)
all:
else
all: target1 target2 targetetc
endif
于 2014-05-15T16:53:00.687 回答
4

只是扩展了@Ken 的出色回应。你也可以这样做:

ifeq ("test", "test")
postinstall:
    @echo "test = test"
else
postinstall:
    @echo "test != test"
endif
于 2017-09-14T04:15:55.037 回答
1

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

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

.ONESHELL:

sayhi:
    @echo Hi
    exit
    @echo Bye
于 2021-07-08T14:38:47.877 回答