Пример мультифайлового файла 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, но я не могу найти ничего, что поддерживает такую настройку. Любая идея?
Ответы
Ответ 1
Установите godag, затем запустите:
gd -o myapp
Он автоматически построит Directic Acyclic Graph (DAG) всех зависимостей в вашем каталоге src/
, затем скомпилирует и свяжет каждый пакет в правильном порядке.
Намного проще, чем вручную поддерживать Makefile, тем более, что в последних версиях Go изменилось значение $(GOROOT)/src/Make.* (теперь больше нет Make. $(GOARCH)). Также полезно:
gd clean
удаляет объектные файлы.
gd -test
запускает автоматизированные тесты (см. пакет тестирования).
gd -dot=myapp.dot
генерирует график импорта вашего пакета, который вы можете визуализировать с помощью GraphViz.
Ответ 2
Что-то вроде этого должно работать
# Makefile
include $(GOROOT)/src/Make.$(GOARCH)
all:main
main:main.$O
$(LD) -Lsubpackage1/_obj -Lsubpackage2/_obj -o [email protected] $^
%.$O:%.go subpackage1 subpackage2
$(GC) -Isubpackage1/_obj -Isubpackage2/_obj -o [email protected] $^
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 предназначен в основном для создания пакетов, поэтому он включен только в файл подпакета.
Ответ 3
hello world с Makefile и тестом (Googles Groupes: golang-nut)
Ответ 4
Отъезд https://github.com/banthar/Go-SDL, который является активно поддерживаемым проектом с несколькими пакетами, используя Make файлы.
Я замечаю, что некоторые из этих ответов используют устаревший Make.$(GOARCH)
include. Так что, надеюсь, вышеупомянутая ссылка будет более стабильной, чем попытка остаться на вершине API Google, меняющего API.