我使用外部工具(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”执行,但仍然向 shell 返回 0。
如果未设置变量,您可以让所有目标不执行任何操作:
ifeq ($(SOME_VAR),)
$(info SOME_VAR not set!)
all:
else
all: target1 target2 targetetc
endif
只是对@Ken 的出色回应进行了一些扩展。你也可以这样做:
ifeq ("test", "test")
postinstall:
@echo "test = test"
else
postinstall:
@echo "test != test"
endif
您所看到的情况发生是因为配方中的每一行都在其自己的 shell 中运行。
您可以使用.ONESHELL,以便所有命令在同一个shell中运行。这样,“退出”就起作用了:
.ONESHELL:
sayhi:
@echo Hi
exit
@echo "I won't be printed"
而不是
exit 0
尝试 $(eval $(exit 0))