我有一个非常简单的Makefile(它只是递归地调用另一个子目录make):
all:
cd addons/godot-haskell-plugin && make && cd -
run:
cd addons/godot-haskell-plugin && make run && cd -
我想做的是
1.检查是否定义了shell变量ENV_VAR
。
1.如果是,则照常运行Makefile(i.即,ENV_VAR=1 make all
应与上述make all
完全相同)。
1.如果不是,则提示用户一条消息“Warning:ENV_VAR未定义;continue?[Y/n]",其中输入“Y”像往常一样传递make all
和make run
,输入“n”简单地回应消息并退出。
我知道要在bash中做到这一点,你需要使用echo
和read
函数的组合。但目前还不清楚如何在Make中做到这一点。
2条答案
按热度按时间mfpqipee1#
Make并不是真正想要交互的,但是你可以组装它。
有不止一种方法可以做到这一点,但由于您似乎希望此行为特定于某些目标(
all
和run
),我会添加一个PHONY目标,它与用户交互,并可能中止Make:请注意,我对一个变量使用了Make条件,对另一个变量使用了bash条件。你可以使用任何一种,但在这种情况下,这是最干净的方式。
8fq7wneg2#
这实际上可能与George的要求相反,但这里有一个版本可以被称为“更惯用”,因为更多的make内置程序,更少的shell脚本:
make
上运行良好,因此出于实用目的,我假设它在任何地方都能正常工作。如果2023年的情况不是这样,请纠正我,对于目前广泛使用的任何操作系统。*最好避免在Makefile中使用
read
,因为提到了here的原因,但我非常喜欢make target VAR=value
的方法,因为它在硬编码所有内容和用大量粗糙的shell脚本提示所有内容之间找到了中间地带。希望能帮助到******************************************************************************************************************************************************************************************************************************************************