如何将-B(全量重建)参数传递给子make进程?
让子Make进程继承
-B(全量重建)参数的简洁方案 当你在主Make中执行make -B触发全量重建时,子Make默认不会自动继承-B参数,以下是几种更简洁的解决方法:
方法1:通过检查MAKEFLAGS中的字符标识传递-B
GNU Make会把短选项(如-B)压缩到MAKEFLAGS的单字符位中(比如你看到的MAKEFLAGS: Bi里的B就对应-B),所以不能直接通过字符串过滤-B,而是要检查字符是否存在:
# 检测是否启用了-B(全量重建)选项 SUB_REBUILD := $(if $(findstring B,$(MAKEFLAGS)),-B) # 子Make调用时带上参数 program: $(MAKE) -C path/to/subdir $(SUB_REBUILD)
方法2:直接传递全部MAKEFLAGS(适合需要继承所有主Make选项的场景)
如果希望子Make继承主Make的所有构建选项(包括-B、-j等),可以直接把MAKEFLAGS传给子Make:
program: $(MAKE) -C path/to/subdir $(MAKEFLAGS)
这种方式最简洁,但要注意会传递主Make的所有选项(比如-i忽略错误、-s静默模式等),如果只需要传递-B,方法1更精准。
为什么你之前的过滤方法失效
Copilot推荐的$(filter -B --always-make,$(MAKEFLAGS))不生效,是因为GNU Make对短选项做了压缩:-B不会以-B字符串的形式出现在MAKEFLAGS中,而是被简化为字符B,所以用findstring检查字符存在性才是正确的方式。
内容的提问来源于stack exchange,提问作者Scott Franco
相关产品推荐
相关产品推荐

