makefile 中的多 select 菜单

Multi select menu in makefile

我有一个在 aws 中部署 x 项目的 makefile

目标是像这样执行 make:

make deploy-production

然后看到这样的输出

Please select the project:
1) api
2) web
3) somethingelse

然后按数字并继续,方法是将选择分配给名为 project

的变量

我已经为支持的环境“自动生成”目标,只想为项目构建多选。 我的示例 makefile 删除了不相关的内容:

ENVIRONMENTS := development staging production
TARGETS := $(foreach X,$(ENVIRONMENTS),deploy-$X)

$(TARGETS):
  $(eval ENV:=$(subst deploy-,,$(@)))
  # here want to ask for project, env i have already as resolved from above line

嗯,make 可以 运行 任何 shell 脚本。因此,如果您编写一个 shell 脚本,要求用户输入并接受答案,您可以 运行 从 make.

你可以这样做:

deploy-production:
        @echo Please select the project:; \
        echo '1) api'; \
        echo '2) web'; \
        echo '3) somethingelse'; \
        read -p 'Enter value: ' result && $(MAKE) CHOICE=$$result got-choice

这里遗漏了很多:处理无效值,将 CHOICE 值转换为目标,然后成为 got-choice 目标的先决条件,等等。我不真的不认为这是一个很好的前进方式,但你可以让它发挥作用。