Какие системы сборки работают с Go?

Я знаю, что источник Go поставляется с Makefile (It in $GOROOT/doc), который я использую прямо сейчас, но у других популярных систем сборки добавлена ​​поддержка Go еще? Кто-нибудь написал сценарии сборки для scons, waf и т.д.

Что вы используете для создания своих программ Go?

Ответ 1

Я использую scons; это пример файла SConstruct:

archs = {'amd64': '6', '386': '8', 'arm': '5',}

def gc(source, target, env, for_signature):
    targets = target[0]
    sources = ' '.join(str(s) for s in source)
    flags = ''
    for include in env.get('GOINCLUDE', []):
        flags += '-I %s ' % (include)
    return '%s -o %s %s %s' % (env['GOCOMPILER'], targets, flags, sources)

def ld(source, target, env, for_signature):
    targets = target[0]
    sources = ' '.join(str(s) for s in source)
    return '%s -o %s %s' % (env['GOLINKER'], targets, sources)

def _go_object_suffix(env, sources):
    return "." + archs[env['ENV']['GOARCH']]

def _go_program_prefix(env, sources):
    return env['PROGPREFIX']

def _go_program_suffix(env, sources):
    return env['PROGSUFFIX']

go_compiler = Builder(generator=gc,
                      suffix=_go_object_suffix,
                      src_suffix='.go',)
go_linker = Builder(generator=ld,
                    prefix=_go_program_prefix,
                    suffix=_go_program_suffix,)

# Create environment
import os
env = Environment(BUILDERS={'Go': go_compiler, 'GoProgram': go_linker},
                  ENV=os.environ,)
arch_prefix = archs[os.environ['GOARCH']]
env.SetDefault(GOCOMPILER=os.path.join(os.environ['GOBIN'], arch_prefix + 'g'))
env.SetDefault(GOLINKER=os.path.join(os.environ['GOBIN'], arch_prefix + 'l'))
# Build programs
# Modify this to suit your program
main_package = env.Go(target='main', source='main.go')
program = env.GoProgram(target='program', source=[main_package])

Ответ 2

Вы можете найти в Go Utils and Tools все доступные инструменты сборки для Go.

Но больше из них заменяется командой go build "и отсутствием Makefile с Go 1.
См. " The go tool" сообщение в блоге.

Пакеты

Go вообще не имеют никакой конфигурации сборки. Там нет make файлов, описания зависимостей и т.д.
Как это работает? Все извлекается из исходного кода. Чтобы позволить волшебству произойти, сначала нужно сделать что-то.

Даже если Makefile все еще можно использовать для чистого исходного кода Go, их можно удалить (например, в этом обзоре кода)

Ответ 3

Я создал свой собственный маленький инструмент под названием gobuild, и я все еще работаю над ним. Он должен иметь возможность компилировать большинство программ/библиотек, которые не взаимодействуют с кодом C, без необходимости писать какие-либо сборки-скрипты/make файлы.

Ответ 4

Я еще не написал достаточно большой проект, чтобы потребовать сборку, поэтому достаточно простого build.sh.

Вы можете использовать $GOROOT, $GOARCH и $GOOS, чтобы определить, что вам нужно:

[email protected] ~ $ env | grep GO
GOARCH=amd64
GOROOT=/home/jurily/go
GOOS=linux

Если это достаточно для Go, для меня это достаточно.