如何配置make使其无主目标?直接调用时即便有首个目标也失败
如何让Makefile在默认调用make时执行失败(忽略首个目标)
可以通过以下几种方式实现需求:
方法一:用.DEFAULT_GOAL指定不存在的默认目标
在Makefile开头设置这个内置变量,指向一个没有定义规则的目标:
.DEFAULT_GOAL := no_valid_default_target # 你原本的首个目标 all: @echo "This is the original first target"
直接运行make时,make会尝试构建no_valid_default_target,但该目标没有对应的规则,会直接报错:make: *** No rule to make target 'no_valid_default_target'. Stop.
方法二:在原有首个目标中强制触发失败
如果不想改动默认目标变量,可以在原本的首个目标里加入返回非零状态的命令:
all: @echo "Default execution is forbidden" @false # 其他正常可用的目标 build: @echo "Starting build..." test: @echo "Running tests..."
直接运行make时,false命令会让make判定执行失败;需要执行正常功能时,只需指定具体目标比如make build即可。
方法三:解析阶段检查目标参数,无目标则报错
利用MAKECMDGOALS变量(保存用户指定的目标列表),在Makefile解析时判断如果为空就抛出错误:
ifeq ($(MAKECMDGOALS),) $(error No target specified. Please provide a valid target name.) endif # 你的业务目标 build: @echo "Building project..." deploy: @echo "Deploying project..."
这种方式会在Makefile加载阶段就直接终止,明确提示用户必须指定目标才能执行。
以上三种方法都能实现“直接调用make时执行失败”的效果,可根据实际场景选择合适的方案。
内容的提问来源于stack exchange,提问作者schuelermine
相关产品推荐
相关产品推荐

