Makefile的-B标志是否会传递给$(MAKE)调用的子Makefile
结论
执行$(MAKE) -C path/to/Makefile all调用子Makefile时,命令行传入的-B标志会被自动传递给对应的子Makefile。
细节说明
- GNU Make针对递归构建场景做了专门设计:只要你在规则中使用内置变量
$(MAKE)(而非硬编码写死make命令)调用子构建流程,Make会自动通过内部的MAKEFLAGS环境变量,把外层命令行传入的、支持递归传递的运行参数透传给子make进程,-B(等价长参数--always-make,作用是强制所有目标无条件跳过时间戳检查直接重建)属于默认透传的标志范畴,不需要手动在子调用命令后追加该参数。 - 可以通过简单方式验证:在被调用的子Makefile开头添加一行打印语句
$(info 子Makefile接收到的MAKEFLAGS值: $(MAKEFLAGS)),执行外层make -B my_target命令时,就能看到输出的标志内容中包含B标识,子Makefile也会完全按照-B的规则执行强制重建逻辑。 - 要注意透传机制的触发前提:如果把规则里的
$(MAKE)替换成硬编码的make命令,自动透传逻辑就会失效,外层传入的-B等参数不会自动传给子进程,这也是官方文档明确要求递归构建必须使用$(MAKE)变量的核心原因之一。
内容的提问来源于stack exchange,提问作者user1334858
相关产品推荐
相关产品推荐

