如何让GNU Make在未指定AUTO_CALL环境变量时强制失败?
解决GNU Make全局限制手动调用的问题
GNU Make 实现方式
要让所有规则(包括rules.mk中的)在未指定AUTO_CALL环境变量时执行失败,无需在每个目标里单独判断,直接在Makefile的全局解析阶段做检查即可。在include rules.mk之前添加全局判断,用$(error)函数终止Make进程:
# 全局检查AUTO_CALL是否存在,不存在直接报错退出 ifndef AUTO_CALL $(error Don't call `make` manually. Please set the AUTO_CALL environment variable first.) endif include rules.mk .PHONY: x x: # 原目标x的执行逻辑 ...
这种方式会在Makefile加载的最早期触发检查,不管用户调用哪个目标(包括rules.mk中定义的),只要未设置AUTO_CALL,Make就会直接抛出错误并终止,不会执行任何规则。
CMake 实现方式
如果用CMake构建,同样可以在配置阶段全局检查环境变量,终止后续流程:
# 检查环境变量AUTO_CALL是否存在 if(NOT DEFINED ENV{AUTO_CALL}) message(FATAL_ERROR "Don't run cmake manually. Please set the AUTO_CALL environment variable first.") endif() # 包含外部规则文件 include(rules.cmake) # 其他CMake配置逻辑 ...
当用户未设置AUTO_CALL时,CMake在执行配置步骤时就会报错退出,不会生成任何构建文件,彻底阻止手动触发构建。
内容的提问来源于stack exchange,提问作者porton
相关产品推荐
相关产品推荐

