You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 22:06:03