【问题标题】:Build multiple packages in parallel并行构建多个包
【发布时间】:2019-05-25 15:10:35
【问题描述】:

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

我的当前目录是“雷神”

在我的 Makefile

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

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

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

示例代码

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

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

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

【问题讨论】:

    标签: makefile parallel-processing


    【解决方案1】:

    代替

    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
    

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

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

    【讨论】:

      【解决方案2】:

      您可以使用gox,它将为多个平台并行构建。

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

      go build完全一样,构建使用

      gox 
      

      如果要构建包和子包:

      gox ./...
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-30
        • 2021-08-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-25
        相关资源
        最近更新 更多