2009-11-14 11 views
10

So che Go source viene fornito con un Makefile (è in $GOROOT/doc) che sto usando in questo momento, ma altri sistemi di build famosi hanno aggiunto il supporto per Go ancora? Qualcuno ha scritto script di build per scons, waf ecc ...Quali sistemi di compilazione funzionano con Go?

Che cosa usi per creare i tuoi programmi Go?

risposta

0

Non ho ancora scritto un progetto abbastanza grande da richiedere un sistema di compilazione, quindi è sufficiente un semplice build.sh.

È possibile utilizzare $GOROOT, $GOARCH e $GOOS per determinare che cosa avete bisogno:

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

Se è abbastanza per andare, è abbastanza per me.

+3

Chiunque altro trovare '$ GOOS' sorta di divertente da pronunciare? –

+8

@Jed: io sono ungherese. Troveresti tutto ciò che mi diverte. –

8

Ho usato scons; questo è un esempio di file 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]) 
+0

Non sono esperto di scons, come lo usi esattamente? –

+0

Scusa, Pynt, ho chiarito l'esempio di codice. Basta inserirlo in un file di SConstruct nella directory del progetto, quindi eseguire 'scons' a livello di progetto. –

1

Ho costruito il mio piccolo strumento chiamato gobuild per questo, e sto ancora lavorando su di esso. Dovrebbe essere in grado di compilare la maggior parte dei programmi/librerie che non si interfacciano con il codice C senza dover scrivere script di compilazione/makefile.

2

È possibile trovare in Go Utils and Tools tutti gli strumenti di generazione disponibili per Go.

Ma più di loro sono sostituite dal comando "go build" e la mancanza di Makefile con Go 1.
Vedere "The go tool" post del blog.

I pacchetti Go non hanno alcuna configurazione di build. Non ci sono makefile, non ci sono descrizioni di dipendenze, ecc.
Come funziona allora? Tutto è recuperato dal codice sorgente. Per far accadere la magia, una cosa deve essere fatta prima.

Anche se Makefile può ancora essere utilizzato, per il codice sorgente pura Go, possono essere rimossi (come in questo code review per esempio)

Problemi correlati