我正在尝试设置一个多包 go 项目,例如
./main.go
./subpackage1/sub1_1.go
./subpackage1/sub1_2.go
./subpackage2/sub2_1.go
./subpackage2/sub2_2.go
其中 main.go 导入 subpackage1 和 subpackage2。并且 subpackage2 导入 subpackage1。
我一直在寻找 go makefile 示例,但我找不到任何支持这种设置的东西。任何想法?
安装godag然后运行:
gd -o myapp
它将自动构建src/
目录中所有依赖项的有向无环图 (DAG),然后以正确的顺序编译和链接每个包。
比手动维护 Makefile 容易得多,特别是因为 $(GOROOT)/src/Make.* 在最近的 Go 版本中发生了变化(不再有 Make.$(GOARCH))。也很有用:
gd clean
删除目标文件。
gd -test
运行您的自动化测试(请参阅测试包)。
gd -dot=myapp.dot
生成您可以使用 GraphViz 可视化的包导入图表。
像这样的东西应该工作
# Makefile
include $(GOROOT)/src/Make.$(GOARCH)
all:main
main:main.$O
$(LD) -Lsubpackage1/_obj -Lsubpackage2/_obj -o $@ $^
%.$O:%.go subpackage1 subpackage2
$(GC) -Isubpackage1/_obj -Isubpackage2/_obj -o $@ $^
subpackage1:
$(MAKE) -C subpackage1
subpackage2:
$(MAKE) -C subpackage2
.PHONY:subpackage1 subpackage2
# subpackage1/Makefile
TARG=subpackage1
GOFILES=sub1_1.go sub1_2.go
include $(GOROOT)/src/Make.$(GOARCH)
include $(GOROOT)/src/Make.pkg
# subpackage2/Makefile
TARG=subpackage2
GOFILES=sub2_1.go sub2_2.go
include $(GOROOT)/src/Make.$(GOARCH)
include $(GOROOT)/src/Make.pkg
GC+=-I../subpackage1/_obj
LD+=-L../subpackage1/_obj
sub2_1.$O sub2_2.$O:subpackage1
subpackage1:
$(MAKE) -C ../subpackage1
.PHONY:subpackage1
如果您不安装子包,则需要显式设置包含路径。提供的makefile Make.pkg 主要用于构建包,这就是它只包含在子包makefile 中的原因。
带有 Makefile 和测试的 hello world (Googles Groupes : golang-nuts)
查看https://github.com/banthar/Go-SDL,这是一个使用 Makefiles 积极维护的多包 go 项目。
我注意到其中一些答案使用了过时Make.$(GOARCH)
的包含。因此,希望上面的链接比试图在此处的答案中保持在 Google 不断变化的 API 之上更稳定。