go的多包makefile示例

oft*_*wel 22 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.

我一直在寻找去makefile的例子,但我找不到任何支持这种设置的东西.任何的想法?

小智 17

安装godag然后运行:

gd -o myapp

它将自动构建src/目录中所有依赖项的Directed Acyclic Graph(DAG),然后按正确的顺序编译和链接每个包.

比手动维护Makefile容易得多,特别是因为$(GOROOT)/src/Make.*在最新版本的Go中已经改变(不再有Make.$(GOARCH)).也很有用:

gd clean 删除目标文件.

gd -test 运行自动化测试(参见测试包).

gd -dot=myapp.dot 生成包导入的图表,您可以使用GraphViz进行可视化.


Sco*_*les 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
Run Code Online (Sandbox Code Playgroud)

如果不安装子包,则需要显式设置包含路径.提供的makefile Make.pkg主要用于构建包,这就是为什么它只包含在子包makefile中.

  • `$(GOROOT)/ src / Make。$(GOARCH)`是执行此操作的旧方法,不再起作用。 (2认同)

小智 5

带有Makefile和测试的hello world(Googles Groupes:golang-nuts)

  • 上面的方法使用`$(GOROOT)/ src / Make。$(GOARCH)`,这是旧的方法,现在已经不起作用了。 (2认同)