我正在尝试设置类似
的多包项目./ main.go
./ subpackage1 / sub1_1.go
./ subpackage1 / sub1_2.go
./ subpackage2 / sub2_1.go
./ subpackage2 / sub2_2.go
其中main.go导入subpackage1和subpackage2。而subpackage2导入subpackage1。
我一直在寻找make makefile示例,但我找不到任何支持这种设置的东西。有什么想法吗?
答案 0 :(得分:17)
安装godag然后运行:
gd -o myapp
它将自动构建您src/
目录中所有依赖项的定向非循环图(DAG),然后按正确的顺序编译和链接每个包。
比手动维护Makefile容易得多,特别是因为$(GOROOT)/src/Make.*在最新版本的Go中已经改变(不再有Make。$(GOARCH))。也很有用:
gd clean
删除目标文件。
gd -test
运行您的自动化测试(请参阅测试包)。
gd -dot=myapp.dot
生成您可以使用GraphViz显示的包导入图。
答案 1 :(得分:7)
这样的事情应该有效
# 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中。
答案 2 :(得分:5)
hello world with a Makefile and a test(Googles Groupes:golang-nuts)
答案 3 :(得分:4)
使用Makefile查看https://github.com/banthar/Go-SDL这是一个积极维护的多包go项目。
我注意到其中一些答案使用过时的Make.$(GOARCH)
包含。所以希望上面的链接比在这里的答案中保持谷歌不断变化的API更加稳定。