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

GNU Make 4.3中.NOTPARALLEL指定目标后全局串行问题求助

问题原因与解决方法

你遇到的问题源于对.NOTPARALLEL特殊目标用法的误解。官方文档中“若.NOTPARALLEL带前置条件,仅该前置条件目标的任务串行”的表述,正确的用法是将.NOTPARALLEL作为目标的依赖,而非把目标作为.NOTPARALLEL的依赖。

你的原写法中,.NOTPARALLEL: notpara会让make认为.NOTPARALLEL这个特殊目标依赖notpara,而只要.NOTPARALLEL在Makefile中被定义(无论是否带依赖),make会默认全局串行执行,这就导致para目标也被强制串行。

修正后的Makefile

t%:
        @ echo "$@..."
        @ sleep 0.0$*
        @ echo "$@ - done"

# 将.NOTPARALLEL作为notpara的依赖,仅构建notpara时串行
notpara: .NOTPARALLEL t4 t3 t2 t1
        @ echo "Done!"

para: t4 t3 t2 t1
        @ echo "Done!"

# 定义空的.NOTPARALLEL目标,不带依赖
.NOTPARALLEL:

验证效果

  • 运行make -j notpara:t4到t1会串行执行,符合预期。
  • 运行make -j para:t4到t1会并行执行,输出顺序会打乱,恢复正常并行行为。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 01:23:13