在Makefile脚本中读取用户输入

时间:2018-09-09 15:13:58

标签: shell makefile

我有一个非常简单的Makefile(只是递归调用另一个子目录make):

all:
    cd addons/godot-haskell-plugin && make && cd -
run:
    cd addons/godot-haskell-plugin && make run && cd -

我想做的是

  1. 检查是否定义了外壳变量ENV_VAR
  2. 如果是,则照常运行Makefile(即ENV_VAR=1 make all的操作应与上面的make all完全一样)。
  3. 如果不是,则提示用户“警告:未定义ENV_VAR;是否继续?[Y / n]”,其中输入“ Y”会传递make all和{{ 1}}一样,输入“ n”只是回显一条消息并退出。

我知道要在bash中执行此操作,您可以结合使用make runecho函数。但目前尚不清楚如何在Make中执行此操作。

1 个答案:

答案 0 :(得分:4)

Make并不是真正想要进行交互的,但是您可以将其混为一谈。

有多种方法可以执行此操作,但是由于您似乎希望此行为特定于某些目标(allrun),因此,我将添加一个与之交互的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

请注意,我对一个变量使用“使有条件”,而对另一变量使用“ bash”作为条件。您可以使用任何一种,但是在这种情况下,这是最干净的方法。