代码之家  ›  专栏  ›  技术社区  ›  George

在Makefile脚本中读取用户输入

  •  0
  • George  · 技术社区  · 6 年前

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

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

    我想做的是

    1. 检查shell变量 ENV_VAR 已定义。
    2. ENV_VAR=1 make all 应该完全按照 make all 上面)。
    3. 如果未定义,则向用户提示消息“Warning:ENV\u VAR is not defined;continue?”?[Y/n]“,其中输入“Y”通过 make run 和往常一样,输入“n”只会回显一条消息并退出。

    我知道要在bash中实现这一点,您将使用 echo read 功能。但目前还不清楚如何做到这一点。

    1 回复  |  直到 6 年前
        1
  •  6
  •   Beta    4 年前

    Make并不是真正用来进行交互的,但是你可以把它混在一起。

    有不止一种方法可以做到这一点,但因为你似乎希望这种行为是特定于某些目标( all run

    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
    

    注意,我对一个变量使用Make条件,对另一个变量使用bash条件。你可以用任何一个,但在这种情况下,这是最干净的方式。