我有一个非常简单的 Makefile(只是递归调用另一个子目录 make):
all:
cd addons/godot-haskell-plugin && make && cd -
run:
cd addons/godot-haskell-plugin && make run && cd -
Run Code Online (Sandbox Code Playgroud)
我想做的是
ENV_VAR定义了shell 变量。ENV_VAR=1 make all应该完全按照make all上面的方式运行)。make all和make run往常一样通过,“n”的输入简单地回显一条消息并退出。我知道要在 bash 中执行此操作,您将使用echo和read函数的组合。但目前尚不清楚如何在 Make 中做到这一点。
Make 并不是真正打算进行交互,但您可以将其混为一谈。
有不止一种方法可以做到这一点,但由于您似乎希望此行为特定于某些目标(all和run),我将添加一个与用户交互的 PHONY 目标,并且可能会中止 Make:
all run: check
.PHONY: check
check:
ifndef ENV_VAR
@echo Warning: ENV_VAR isn\'t defined\; continue? [Y/n]
@read line; if [ $$line = "n" ]; then echo aborting; exit 1 ; fi
endif
Run Code Online (Sandbox Code Playgroud)
请注意,我对一个变量使用 Make 条件,对另一个变量使用 bash 条件。您可以使用任何一个,但在这种情况下,这是最干净的方法。