首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >并行构建多个包

并行构建多个包
EN

Stack Overflow用户
提问于 2017-08-04 07:57:35
回答 2查看 1.9K关注 0票数 0

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

我现在的目录是"thor“

在我的Makefile

代码语言:javascript
复制
build:
    go build -o thor
    go build thor/package1
    go build thor/scripts/package2

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

对于shell脚本,这种情况可以通过使用&在后台运行每个脚本来处理,然后使用等待等待到每个脚本的末尾。

示例代码

代码语言:javascript
复制
#!/bin/bash
echo "Starts"
./s1.sh &
./s2.sh &
./s3.sh &
wait
echo "ends"

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

那么,我们可以在Makefile中这样做吗?)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-04 09:18:54

而不是

代码语言:javascript
复制
build:
    go build -o thor
    go build thor/package1
    go build thor/scripts/package2

把这个分成三个不同的菜谱,如下所示

代码语言:javascript
复制
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,您就完成了。

最好有与命令实际创建的文件相对应的目标,以及一个先决条件列表。然后您不需要.PHONY ,而 make可以决定是否确实需要重建。

票数 5
EN

Stack Overflow用户

发布于 2019-05-25 07:10:35

您可以使用戈克斯将多个平台的构建并行化。

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

go build完全相同,使用

代码语言:javascript
复制
gox 

如果您想要构建包和子包:

代码语言:javascript
复制
gox ./...
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45501238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档