go的多包makefile示例

时间:2009-11-19 21:33:23

标签: makefile 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。

我一直在寻找make makefile示例,但我找不到任何支持这种设置的东西。有什么想法吗?

4 个答案:

答案 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更加稳定。