2010-04-27 6 views
17

SQLite e googletest sono dotati di una versione a un solo file molto semplice da usare che rende semplice l'uso in altri progetti, poiché è sufficiente aggiungere un singolo file sorgente. Entrambi usano strumenti home-brew per creare il file sorgente combinato, quindi mi chiedo se esiste uno strumento più generico per questo? Dovrebbe richiedere un elenco di file di implementazione/header e sputare un'intestazione/fonte combinata e correggere gli include locali. Sto bene se non gestisce gli include condizionali/include con diversi #defines prima di loro come Boost.Tuple/MPL li usa. Una tipica libreria di destinazione sarebbe qualcosa come l'ICU.Strumento per creare una fusione/combinare tutti i file sorgente di una libreria in uno per C/C++?

+0

Quale sistema operativo? –

+0

Windows o Linux, preferibilmente entrambi. Sto bene anche se lo strumento funziona solo su uno di essi. – Anteru

risposta

3

Se i tuoi include sono definiti correttamente (ovvero, ci sono guardie in tutti i file di intestazione, e ogni intestazione/unità di codice contiene tutto ciò che richiede) quindi puoi farlo 'a metà manuale'. Individua l'intestazione di sistema includendoli e commentandoli, quindi crea un'intestazione che include solo tutto in ordine casuale e pre-processa l'intestazione (in gcc che sarebbe gcc -E) e poi opererà in modo simile con le unità di codice.

Questo approccio manuale può essere ingombrante, ma se si ha solo bisogno di farlo una volta che andrà bene. Poi di nuovo, anche se la fusione dei file header potrebbe avere senso, preferisco non farlo. In realtà lascerei i file separati e, se ritieni necessario semplificare l'accesso, fornisci intestazioni di raggruppamento che includono solo gli altri. Questo è l'approccio adottato da alcune librerie di boost, in cui è possibile includere i dettagli di ciò che si desidera o una singola intestazione che include tutto il resto. Il codice può essere compilato/collegato in una lib statica e utilizzato come se fosse un singolo elemento.

1

Questo potrebbe essere un po 'interessante in ICU, che ha, in alcuni casi, incompatibili definizioni/include e miscele di C e C++ e un numero di file generati. Forse facci sapere come va?

(divulgazione: ICU sviluppatore)

Problemi correlati