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

如何避免submake继承上层make的命令执行标记?

实现方法

GNU make 默认会将当前执行的所有命令行标记通过 MAKEFLAGS 环境变量传递给 submake,你可以通过以下方式阻断传递:

  • 调用 submake 时显式清空 MAKEFLAGS 变量
    这是兼容性最好的通用实现方式,无需依赖特定 make 版本,在 Makefile 中调用子 make 的写法示例:
    $(MAKE) -C 子目录路径 MAKEFLAGS=
    
    如果你是在命令行直接嵌套调用 make,写法为:
    make -C subdir MAKEFLAGS=
  • 全局阻断所有 submake 的标记传递
    如果你需要让当前 Makefile 下所有 submake 都不继承上层标记,可以在 Makefile 开头添加一行:
    unexport MAKEFLAGS
    
  • 单独阻断特定标记传递
    如果你只是不想传递某几个特定标记(比如并行标记 -j、调试标记 -d),可以在调用 submake 时显式覆盖对应参数即可,比如要强制submake用单线程执行,忽略上层的并行配置:
    $(MAKE) -C subdir -j1
    

补充说明:如果你使用的是GNU make 4.0及以上版本,也可以在调用submake时添加 --no-export 参数阻断内置变量的传递,但清空 MAKEFLAGS 的方案适配性更广,支持所有类Unix平台的主流make实现。

内容的提问来源于stack exchange,提问作者Anirudh _k

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:27:00