2009-11-14 12 views
10

Sé que la fuente Go viene con un Makefile (está en $GOROOT/doc) que estoy usando en este momento, pero otros sistemas populares de compilación han agregado soporte para Go todavía? ¿Alguien ha escrito scripts de compilación para scons, waf, etc. ...¿Qué sistemas de compilación funcionan con Go?

¿Qué usa para construir sus programas de Go?

Respuesta

0

No he escrito un proyecto lo suficientemente grande como para requerir un sistema de compilación, por lo que un simple build.sh es suficiente.

Puede utilizar $GOROOT, $GOARCH y $GOOS para determinar lo que necesita:

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

Si es suficiente para ir, es suficiente para mí.

+3

Alguien más encontrar $ 'GOOS' especie de divertida de pronunciar? –

+8

@Jed: soy húngaro. Encontrarías todo lo que pronuncio como divertido. –

8

He estado usando scons; este es un ejemplo SConstruct archivo:

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]) 
+0

No soy un experto con scons, ¿cómo exactamente usas esto? –

+0

Disculpe, Pynt, aclaré el ejemplo del código. Simplemente ponga esto en un archivo SConstruct en su directorio de proyecto, y luego ejecute 'scons' en el nivel del proyecto. –

1

he construido mi propia pequeña herramienta llamada gobuild para eso, y todavía estoy trabajando en ello. Debería ser capaz de compilar la mayoría de los programas/libs que no interactúan con el código C sin tener que escribir ningún build-scripts/makefiles.

2

Usted puede encontrar en Go Utils and Tools todas las herramientas de construcción disponibles para Go.

Pero más de ellos están sustituidas por el comando "go build" y la falta de Makefile con Go 1.
Ver "The go tool" entrada de blog.

Los paquetes Go no tienen ninguna configuración de compilación. No hay makefiles, no hay descripciones de dependencias, etc.
¿Cómo funciona entonces? Todo se recupera del código fuente. Para dejar que la magia suceda, primero hay que hacer una cosa.

Incluso si Makefile se puede seguir utilizando, para el código fuente Ir puro, que se puede quitar (como en este code review por ejemplo)