Ho lavorato negli ultimi anni a una suite di compilatori di ricerca, che crea diversi eseguibili e librerie. Ha un sistema di build (cioè bootstrapper
) che guarda nella directory ./src/bin
alla ricerca di strumenti da compilare, e su ./src/lib
, ./src/rtl
e ./src/std
per le librerie, gestendo le dipendenze (solo interno dipendenze!). Funziona praticamente come un singolo makefile per più strumenti (come fa GCC). Per questo motivo condividono la stessa base di codice . Finora ho utilizzato un singolo repository git.
Poiché la maggior parte degli strumenti e delle librerie sono autosufficienti, mi piacerebbe dividere il repository in diversi moduli, poiché la maggior parte degli strumenti non dipendono l'uno dall'altro (non esistono affatto dipendenze cicliche, solo un paio di quelle gerarchiche) !).
Ad esempio, avrei un modulo core
con il sistema di base, che sarebbe simile a questo:
./README
./src/bootstrapper.krc
./src/bin/cpp.c
./src/bin/cc.c
./src/lib/cpp/...
./src/lib/cc/...
./src/lib/foo/...
./src/lib/bar/...
Che contiene il costruttore, e che è autonomo; dovrebbe generare cpp
, cc
e libcpp
, libcc
, libfoo
e libbar
librerie.
Mi piacerebbe quindi avere, ad esempio, un modulo ruby
separato in qualche modo, che sarebbe simile a qualcosa:
./src/bin/rbc.c
./src/lib/rbc/...
./src/std/ruby/...
Che creerebbe rbc
, librbc
e libstdruby
... e poi un modulo python
come:
./src/bin/pyc.c
./src/lib/pyc/...
./src/std/python/...
Quale creerebbe pyc
, libpyc
e libstdpython
.
Sebbene entrambi i moduli ipotetici ruby
e python
dipendano dal modulo core
, non hanno alcuna dipendenza l'uno dall'altro (ed è per questo che sto pensando di suddividere il mio attuale repository).
In quale modo potrei ottenere questo? Ho pensato di utilizzare diversi rami git per ogni modulo (ma avrei bisogno di diversi hook per rebase automaticamente tutto in base alle loro dipendenze, come avere più copie del modulo core
e tenerli aggiornati), più repository git (stesso problema ), e i sottomoduli git non sono d'aiuto perché avrei bisogno di una base per file a causa del sistema di compilazione che ho ...
(Anche se preferisco git, perché mi piacerebbe pubblicarlo su GitHub, non mi importa passare a un altro SCM.)
Tutti gli strumenti ( bin/example
) dipendono dallo stesso ./include/bin/main.h
(che sarebbe parte del modulo core
) che ha molte macro ... ogni cartella su ./src/
ha effettivamente un% co_de corrispondente % cartella troppo (es. ./include/
).
Ecco una foto di qualcosa che ho descritto sopra, come è attualmente: