如何在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中做这样的事情:)
答案 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 ./...