我在不同的地方看到过这个问题的讨论,答案如“使用 cmd/foo、cmd/bar”类型的文件夹结构。
这对我不起作用。
这个有效:
$ du -a
8 ./src/cmd/bin1/main.go
8 ./src/cmd/bin1
8 ./src/cmd/bin2/main.go
8 ./src/cmd/bin2
16 ./src/cmd
8 ./src/shared/foo/foo.go
8 ./src/shared/foo
8 ./src/shared
24 ./src
并构建它:
go build ./src/cmd/bin2
go build ./src/cmd/bin1
但是,我不知道什么变体:
go build ./src/...
我可能需要一步构建所有此类二进制文件。
这种布局:
$ du -a
8 ./cmd/bin1/main.go
8 ./cmd/bin1
8 ./cmd/bin2/main.go
8 ./cmd/bin2
16 ./cmd
8 ./src/shared/foo/foo.go
8 ./src/shared/foo
8 ./src/shared
8 ./src
24 .
似乎完全无法使用。 go build ...
命令的组合似乎无法构建 bin1 或 bin2。
我能得到的最好的是 go build cmd/bin1/main.go
,它给我一个名为“main”的二进制文件。没有帮助。
那么,具体来说,包括 go build
命令在内,它实际上构建了各个二进制文件,你是怎么做到的?
...为什么人们不断给出的默认建议是使用顶级 cmd
文件夹?如果你这样做,你如何构建这些二进制文件?
最佳答案
如果您不想将二进制文件安装到 $GOPATH/bin
中,您可以像其他开源项目一样创建脚本。
大多数项目都有用于生成多个二进制文件的 make 文件和构建脚本。
在您的情况下,您可以构建一个脚本来遍历 cmd
中的包,然后在每个包上运行 go build
。
cd $GOPATH/someProject
for CMD in `ls cmd`; do
go build ./cmd/$CMD
done
这导致:
[root@node1 test]# ls $GOPATH/someProject
bin1 bin2 cmd
您可以查看几个热门项目:
关于go - 如何一次构建多个包二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37680437/