什么构建系统与Go一起使用?

时间:2009-11-14 23:38:07

标签: go build-system

我知道Go源附带了一个Makefile(它位于$GOROOT/doc),我现在正在使用它,但是还有其他流行的构建系统添加了对Go的支持吗?是否有人为sconswaf等编写了构建脚本...

你用什么来构建你的Go程序?

4 个答案:

答案 0 :(得分:9)

我一直在使用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])

答案 1 :(得分:2)

您可以在 Go Utils and Tools 中找到Go的所有可用构建工具。

但是其中更多的内容被“ go build ”命令取代,并且缺少使用Go 1的Makefile。 请参阅“The go tool”博文。

  

Go包根本没有任何构建配置。没有makefile,也没有依赖关系的描述等   怎么样呢?从源代码中检索所有内容。为了让神奇的事情发生,必须先做一件事。

即使仍然可以使用Makefile,对于纯Go源代码,也可以删除它们(例如,在此code review中)

答案 2 :(得分:1)

我为此构建了自己的小工具gobuild,我仍在努力。它应该能够编译大多数不与C代码连接的程序/库,而不必编写任何构建脚本/ makefile。

答案 3 :(得分:-1)

我还没有编写足够大的项目来要求构建系统,所以简单的build.sh就足够了。

您可以使用$GOROOT$GOARCH$GOOS来确定您的需求:

jurily@jurily ~ $ env | grep GO
GOARCH=amd64
GOROOT=/home/jurily/go
GOOS=linux

如果对Go来说足够了,那对我来说已经足够了。