我知道 Go 源代码附带了一个$GOROOT/doc
我现在正在使用的 Makefile(它在 中),但是其他流行的构建系统是否添加了对 Go 的支持?有没有人为scons,waf等编写过构建脚本...
你用什么来构建你的 Go 程序?
我知道 Go 源代码附带了一个$GOROOT/doc
我现在正在使用的 Makefile(它在 中),但是其他流行的构建系统是否添加了对 Go 的支持?有没有人为scons,waf等编写过构建脚本...
你用什么来构建你的 Go 程序?
我一直在使用 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])
为此,我构建了自己的名为gobuild的小工具,并且仍在研究它。它应该能够编译大多数不与 C 代码交互的程序/库,而无需编写任何构建脚本/makefile。
你可以在Go Utils and Tools中找到所有可用的 Go 构建工具。
但其中更多被“ go build
”命令和 Go 1 缺少 Makefile所取代。
请参阅“ Go工具”博客文章。
Go 包根本没有任何构建配置。没有makefile,没有依赖关系的描述等。
那么它是如何工作的?一切都从源代码中检索。要让魔法发生,首先必须做一件事。
即使 Makefile 仍然可以使用,对于纯 Go 源代码,它们也可以被删除(例如在这个代码审查中)
我还没有写一个足够大的项目来需要一个构建系统,所以一个简单build.sh
的就足够了。
您可以使用$GOROOT
,$GOARCH
来$GOOS
确定您需要什么:
jurily@jurily ~ $ env | grep GO
GOARCH=amd64
GOROOT=/home/jurily/go
GOOS=linux
如果它对 Go 来说足够了,那对我来说就足够了。