2011-02-08 10 views
6

Qualcuno può proporre alcune buone pratiche per organizzare i file sorgente e gestire le build quando si usa C++ sotto Linux. Uso CMake per gestire le mie build anche se non uso costrutti complessi in questo momento. Diciamo che abbiamo i seguenti tre scenari.
1. Per un'applicazione makefile creare semplicemente alcuni file eseguibili da semplici file .cpp e .h
2. Per creare una libreria statica/condivisa che utilizza altre librerie condivise popolari, ad esempio OpenCV e OpenGL.
3. Tipi più complicati, ad esempio, diciamo che è necessario creare un eseguibile i cui file di origine utilizzino librerie esterne come OpenCV e anche una libreria statica personalizzata che abbiamo creato noi stessi (ad esempio, una libreria statica personalizzata con intestazioni associate che abbiamo costruito con passaggio 2 sopra).Consigli sull'organizzazione di sorgenti e sullo sviluppo in C++ sotto Linux (CMake come generatore)

Sono sicuro che molti di voi lavorano su progetti di libreria complicati in cui il processo di compilazione non è così semplice. Non vedo l'ora di ottenere risposte sorprendenti da parte di appassionati e hacker open source che contribuiscono a progetti open source. Come organizzate il vostro codice sorgente?

risposta

4

Dato che si sta utilizzando CMake, suggerirei di utilizzare le compilazioni di origine (completamente esterne o in una sottodirectory build della directory principale del progetto). Quando si utilizzano più di una configurazione e/o compilatore contemporaneamente è possibile creare un directory di compilazione separata per ognuno.

Nel CMakeLists.txt nella directory root del progetto, ho impostato le cose che devono essere utilizzate da tutti i file CMakeLists.txt nella sottodirectory src. Metto tutte le fonti per i file eseguibili e le librerie in una sottodirectory src e di solito raggruppo le origini che formano una singola libreria o un eseguibile all'interno della loro sottodirectory all'interno di src insieme a un documento CMakeLists.txt che descrive come costruirlo. Di solito non separo i file inclusi dai sorgenti.

Ho anche una sottodirectory cmake nella directory principale del progetto dove inserisco i file specifici di CMake come i moduli di ricerca e nel mio caso un modulo cmake speciale che ha risolto i percorsi che l'IDE di Eclipse individua automaticamente.

|--cmake 
| | 
| |--FindXXX.cmake 
| 
|--src 
| | 
| |--projectABC 
| | | 
| | |--CMakeLists.txt 
| | 
| |--library1 
| | | 
| | |--CMakeLists.txt 
| | 
| |--library2 
|  | 
|  |--CMakeLists.txt 
| 
|--CMakeLists.txt 
| 
|--build-release 
|--build-debug 
|--build-msvc-release 
|--[...] 
+0

Grazie mille. – hAcKnRoCk

+0

@trenki dove metti file di intestazione comuni? Hai una directory "include" sotto src? – hopia

+0

@hopia: Se metto tutti i file di intestazione _public_ per una libreria in una directory "include" allo stesso livello della directory "src" proprio come la maggior parte delle librerie open source lo fanno. – trenki

0

Suggerisco di organizzare le fonti per tema e avere directory binarie (o oggetto) separate. File di intestazione e file di origine nella stessa directory. Una directory per ogni compilatore o piattaforma diversa:

Fields 
|-- src 
| field_int.hpp 
| field_int.cpp 
| 
|-- obj_linux_gcc 
| | 
| |-- debug 
| | 
| |-- release 
| 
|-- obj_windows_gcc 
| 
|-- obj_visual_studio 

In questi ultimi anni in vari negozi, ho scoperto che separa i file di intestazione e di origine in directory separate, senza per quanto riguarda il tema, è un dolore per mantenere e prende anche un molto tempo per conoscere.

"Questa è solo la mia opinione, potrei sbagliarmi." - Dennis Miller, comico.

Problemi correlati