我有一个makefile,它有一个“应急步骤”,如果任务在没有预先关键设置的情况下运行,可以引导环境:
bootstrap: ensure_opam_switch_once build
.ONESHELL:
$(FRONTEND_OPAM_SWITCH):
@echo ''
@echo "$(bold)[make bootstrap]$(sgr0) An opam-switch doesn't exist for frontend/, creating one ..."
OPAMYES=true $(MAKE) init
opam exec --sw="${FRONTEND_DIR}" -- $(MAKE) bootstrap
@EXIT_CODE=$$?
@exit $$EXIT_CODE
ensure_opam_switch_once: | $(FRONTEND_OPAM_SWITCH)
init:
# this does critical first-time setup
build:
# ... everything else happens here
问题是,需要为makefile的其余部分设置几个shell变量--我不能保证知道这些变量。(opam
用eval
设置了一些东西;例如rbenv
、nvm
、pyenv
等)
我的计划/hack是在安装后重新执行make任务,并在make被调用的环境中配置这些shell变量。(在上面的例子中,这是opam exec
行。
然而,我现在的问题是,如果子make成功退出,那么我的@exit $$EXIT_CODE
不会导致Make退出!它继续运行并尝试执行其他依赖项,这显然是失败的,因为 outer Make调用没有任何必要的shell环境。
有没有一种方法可以用一个成功的退出代码停止Make?
2条答案
按热度按时间s71maibg1#
你可以使用条件来隐藏或不隐藏Makefile的某些部分。使用
PASS
make变量定义应使用Makefile的哪一部分的示例:apeeds0o2#
Fwiw,下面的停止
make
,但退出代码1“失败”,不成功,因为你想: