并行构建多个包

时间:2017-08-04 07:57:35

标签: makefile parallel-processing

如何在Parallel中构建包以减少make命令(Golang)所花费的时间

我当前的目录是“thor”

在我的 Makefile

build:
    go build -o thor
    go build thor/package1
    go build thor/scripts/package2

在上述情况下,所有包都是独立运行的独立进程。当我运行 make 命令时,每个包逐个构建。因此,如果每个包装构建需要30秒,则需要90秒(30秒* 3)。但如果我可以并行构建这些软件包,则只​​需30秒。

如果是shell脚本,可以通过使用& 在后台运行每个脚本来处理这种情况,并等待每个脚本的结尾使用等待

示例代码

#!/bin/bash
echo "Starts"
./s1.sh &
./s2.sh &
./s3.sh &
wait
echo "ends"

在上述情况下,所有脚本s1.sh,s2.sh,s3.sh将同时运行并等待所有进程完成。

那么,我们也可以在Makefile中做这样的事情:)

2 个答案:

答案 0 :(得分:2)

而不是

build:
    go build -o thor
    go build thor/package1
    go build thor/scripts/package2

将它分成三个单独的食谱,类似这样

build: build1 build2 build3

build1:
    go build -o thor

build2:
    go build thor/package1

build3:
    go build thor/scripts/package2


.PHONY: build build1 build2 build3

然后使用make选项致电-j,您就完成了。

最好使用go build命令与实际创建的文件对应的目标以及先决条件列表。那么你不需要.PHONY make可以决定是否真的需要重建。

答案 1 :(得分:0)

您可以使用gox来并行化多个平台的构建。

默认情况下,Gox将根据您拥有的CPU数量进行并行化,并默认为每个平台构建

go build完全相同,使用

构建
gox 

如果要构建软件包和子软件包:

gox ./...