使用gnumake和前置条件进行并行构建

11

我的第一个问题(耶!)是关于gnumake和并行构建的。这里是一个快速示例文件:

.PHONY: tool_1 tool_2 tool_3 tool_4 all tools

all: | tools

tools: | tool_2 tool_3 tool_4

tool_1:
    # commands for tool 1

tool_2: | tool_1
    # commands for tool 2

tool_3: | tool_1
    # commands for tool 3

tool_4: | tool_1
    # commands for tool 4
如果我在这里运行make -j,那么我所做的是正确的吗?目的是确保命令tool_1只执行一次,而且在make尝试构建任何tool_[234]之前就完成。

我的意图是让make -j先构建tool_1,然后并行构建tool_[234],但不要执行三次tool_1的命令。希望这样说得清楚。感谢任何建议或想法!

它似乎按照我的意愿工作,但是这种并行构建的东西会根据系统负载或从一台机器到另一台机器的变化而改变行为。 - Carl Norum
1个回答

8

make -j 像你在问题中期望的那样运行。它不会多次制作依赖项。

在你的依赖项列表中,管道符号 (|) 是用来做什么的?


10
仅用于依赖关系的目标: http://www.gnu.org/software/make/manual/make.html#Prerequisite-Types - Amro
太好了,谢谢@Alex。我在文件中找不到明确说明这一点的内容。 - Carl Norum
我以为我对GNU make非常了解,但是我错过了这个功能。 - JesperE

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接