如何在GNU Make内部获取调用时传入的-B等命令行选项
Makefile 中判断是否传入 -B 参数的实现方法
可以在Makefile内部通过内置变量获取命令行参数,实现你的需求,具体方案如下:
核心实现逻辑
GNU Make 会将所有命令行传入的参数存储到两个内置变量中:
MAKEFLAGS:存储所有短选项、全局生效的参数MAKECMDGOALS:存储命令行传入的显式目标、长选项参数
我们可以通过过滤这两个变量的内容,判断是否传入了-B(即--always-make全量重编译)参数。
示例代码
# 匹配短选项 -B HAS_ALWAYS_MAKE := $(filter b B, $(firstword -$(MAKEFLAGS))) # 匹配长选项 --always-make ifneq ($(filter --always-make, $(MAKEFLAGS) $(MAKECMDGOALS)),) HAS_ALWAYS_MAKE := 1 endif # 条件分支控制 ifeq ($(HAS_ALWAYS_MAKE),) # 未传入 -B 时执行的增量编译专属逻辑 $(info 当前为增量编译模式) else # 传入 -B 时执行的全量重编译专属逻辑 $(info 当前为全量重编译模式) endif # 示例编译规则 all: @echo 构建任务执行完成
验证方法
- 执行普通编译命令
make,会输出「当前为增量编译模式」 - 执行全量重编译命令
make -B或make --always-make,会输出「当前为全量重编译模式」
注意事项
- 该方案仅适配 GNU Make 环境,其余Unix Make衍生版本可能存在内置变量兼容问题
- 请勿直接修改
MAKEFLAGS变量强制开启全量重编译,会导致嵌套调用子make时出现异常行为
内容的提问来源于stack exchange,提问作者FatherJack
相关产品推荐
相关产品推荐

