Sto provando a preparare un sistema di build usando SCons. Voglio usare clang
per la fase di generazione del codice e un toolchain del compilatore personalizzato per tutto il resto.Configurazione degli SCons per utilizzare strumenti separati per la generazione e l'assemblaggio del codice
Per impostazione predefinita, la configurazione di SCons non dispone di un passaggio esplicito in cui vengono generati i file di assemblaggio (.s)
.
Per aggirare questo problema, ho creato il mio Builder
che emette i file di assemblaggio.
code_generator = Builder(action = '$CC -$LOTS_OF_FLAGS -S $SOURCE -o $TARGET', suffix = '.s')
env.Append(BUILDERS = {'CodeGenerator':code_generator})
Ho quindi utilizzare questo Builder
sul mio file di origine e passare il conseguente NodeList
al Program
.
for file in Glob('*.c'):
sources += env.CodeGenerator(file)
env.Program('say_hello', sources)
Questo funziona bene quando non modifico nessuna variabile. Ottengo un eseguibile usando gcc
.
Tuttavia, quando provo a sostituire le variabili appropriate in modo che SCons utilizzi la toolchain personalizzata (utilizzando env.Replace(CC='clang')...
), viene generato solo un file di assieme. Il mio personalizzato Builder
non viene chiamato su qualsiasi altro file e SCons cerca di collegarsi con un solo file oggetto (che non riesce ovviamente)
- Come posso fare SCons corrono il costruttore su tutti i file e comprendono quei file oggetto per il collegamento ?
- C'è un modo migliore per realizzare ciò che sto provando a fare Io ? Sto solo iniziando a lavorare con SCons.
Anche dopo la correzione proposta, continuo a fronte lo stesso problema. Ma grazie per l'osservazione sulla documentazione extra nella pagina man. Avevi ragione, mi riferivo solo alla guida dell'utente. Investigheremo ulteriormente e riferirò se avrò successo. – Buzzy
Quale versione di scons stai usando? –
Installato usando Homebrew su Mac: script: v2.1.0.r5357 engine: v2.1.0.r5357 – Buzzy