并行构建多个包

Sha*_* BJ 0 parallel-processing makefile

如何并行构建包以减少 make 命令花费的时间(Golang)

我当前的目录是“雷神”

在我的Makefile里面

build:
    go build -o thor
    go build thor/package1
    go build thor/scripts/package2
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,所有的包都是独立运行的独立进程。当我运行make命令时,每个包都一个一个地构建。因此,如果每个包构建需要 30 秒,则总共需要 90 秒(30 秒 * 3)。但如果我可以并行构建这些包,只需要 30 秒。

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

示例代码

#!/bin/bash
echo "Starts"
./s1.sh &
./s2.sh &
./s3.sh &
wait
echo "ends"
Run Code Online (Sandbox Code Playgroud)

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

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

小智 5

代替

build:
    go build -o thor
    go build thor/package1
    go build thor/scripts/package2
Run Code Online (Sandbox Code Playgroud)

把它分成三个单独的食谱,像这样

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
Run Code Online (Sandbox Code Playgroud)

然后调用make-j选项,你就大功告成了。

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