Così Ho letto le domande sul qui circa gerarchica costruisce come: Creating a Hierarchical Build with SConsReal Hierarchical Builds con SCons?
voglio fare costruzione reale gerarchica dei due pronti contro termine standalone che utilizzano entrambi scons che ho impostato come sub-repos utilizzando mercuriale. Di seguito è riportato il layout del file che illustra ciò che voglio fare.
layout desiderato:
project_root/ (new project that builds bar app using the libfoo built from source)
libfoo_subrepo/ (standalone project repo from bitbucket)
src/
SConscript
libfoo.c
libfoo.h
test/
SConscript
test_foo.c
SConstruct
barapp_subrepo/ (standalone project repo from bitbucket that uses libfoo)
src/
SConscript
bar.c
bar.h
test/
SConscript
test_bar.c
SConstruct
test/
SConscript
test_bar_with_foo.c
SConstruct
Così ho due pronti contro termine separati, entrambi con scons. Il primo, libfoo, può essere clonato standalone e costruito usando scons. Quando si eseguono scons nella directory root libfoo, costruisce una libreria statica di libfoo in src/e crea un test eseguibile unit test in test/che si collega alla libreria statica in src /.
Il secondo repo ha l'app bar che dipende da libfoo. Anch'esso può essere clonato autonomamente e se libfoo è installato sul sistema di build, può essere costruito usando scons.
Quello che voglio fare è impostare un nuovo repository (project_root) che abbia sia il repository di libfoo che quello di bar impostati come subrepos usando mercurial. Quindi, quando clonate questo nuovo repository, esso automaticamente estrae la barra app e la sua dipendenza, libfoo. Quindi voglio essere in grado di eseguire scons nella root di questo nuovo repository e farlo eseguire scons nel libfoo_subrepo/root per creare libfoo ed è unit test. Quindi voglio eseguire scons nel barapp_subrepo/root per costruire la barra e dirgli di collegarsi alla libreria statica libfoo in libfoo_subrepo/src /. Infine, desidero creare alcuni nuovi test unitari nei test/che utilizzano sia la libreria statica libfoo che i file sorgente dall'app bar alla test bar app e libfoo quando combinati insieme.
Per quanto ne so dalla lettura della documentazione di scons è che avrei bisogno di creare un Builder personalizzato per "subrepo" che avrebbe eseguito scons in una sotto-shell. Quindi potrei aggiungere libfoo.subrepo e barapp.subrepo alla directory project_root/e alcuni come rig in modo che quando il builder va a eseguire il comando per creare libfoo.subrepo che traduce il nome sorgente in un percorso che esegue scons in
building 'libfoo.subrepo' translates into executing 'cd libfoo_subrepo; scons'
Mi sembra che gli scons non possano ricorsivamente creare progetti di scons autonomi. Tutto ciò che ho letto presuppone che tu abbia la possibilità di creare file SConscript nelle sottocartelle e quindi che il file SConstruct di root dipenda dai file SConscript. Per favore dimmi che c'è un modo per fare quello che voglio con gli scons. Non voglio tornare a fare.
Grazie.
Se si è creata una compilazione in una sottodirectory utilizzando questa soluzione, e quindi è stata eseguita una ricostruzione dal livello superiore, non sarebbe stata ricostruita nuovamente l'intera sottodirectory? –
@GeoffreyIrving, buon punto. A seconda delle dimensioni del progetto, potrebbe non essere importante. Ma potrebbe essere possibile evitare ciò che si menziona specificando il file db scons per una build di root e build di sottodirectory, oppure usando diverse dirs di varianti. – Brady