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 可以决定是否真的需要重建。
| 归档时间: |
|
| 查看次数: |
1371 次 |
| 最近记录: |