Makefile中all目标的依赖顺序是否会影响执行顺序?
Makefile中all目标的依赖顺序是否重要?
默认情况下,Make会按从左到右的顺序启动依赖目标的构建,但这并不保证target2一定在target3之后执行完毕。
具体来说:
- 当不启用并行构建(默认无
-j参数)时,如果各个依赖目标之间没有互相依赖,Make会严格按照all中书写的顺序依次执行每个目标的构建规则。比如你给出的示例:
执行all : target1 target2 target3 target1: @echo "Building target1" target2: @echo "Building target2" target3: @echo "Building target3"make会得到固定顺序的输出:Building target1 Building target2 Building target3 - 但如果启用了并行构建(比如用
-j2参数),Make会同时启动多个构建任务,此时依赖的书写顺序就无法保证执行顺序了,输出顺序可能变成target1→target3→target2或者其他组合。
如果需要确保target2一定在target3之前完成构建,不能仅依赖all的依赖顺序,必须显式声明两者的依赖关系:
target3: target2
这样不管是否开启并行,Make都会保证先完成target2的构建,再开始target3。
内容的提问来源于stack exchange,提问作者Cool Camel
相关产品推荐
相关产品推荐

