Uno dei modi popolari di organizzare directory del progetto è più o meno così:C++ fonte progetto di allestimento codice
MyLib +--mylib_class_a.h mylib_class_a.cpp mylib_library_private_helpers.h mylib_library_private_helpers.cpp MyApp +--other_class.h other_class.cpp app.cpp
app.cpp
:
#include "other_class.h"
#include <mylib_class_a.h> // using library MyLib
Tutti .h
e .cpp
file per la stessa libreria sono nella stessa directory. Per evitare la collisione dei nomi, i nomi dei file sono spesso prefissi con il nome dell'azienda e/o il nome della libreria. MyLib si troverà nel percorso di ricerca dell'intestazione di MyApp, ecc. Non sono un fan del prefisso dei nomi di file, ma mi piace l'idea di guardare lo #include
e sapere esattamente dove si trova quel file di intestazione. Non odio questo approccio all'organizzazione dei file, ma penso che dovrebbe esserci un modo migliore.
Dal momento che sto iniziando un nuovo progetto, desidero sollecitare alcune idee per l'organizzazione delle directory. Attualmente mi piace questa struttura di directory:
ProjA +--include +--ProjA +--mylib +--class_a.h +--app +--other_class.h +--src +--mylib +--class_a.cpp library_private_helpers.h library_private_helpers.cpp +--app +--other_class.cpp app.cpp util.h
app.cpp
:
#include "util.h" // private util.h file
#include <ProjA/app/other_class.h> // public header file
#include <ProjA/mylib/class_a.h> // using class_a.h of mylib
#include <other3rdptylib/class_a.h> // class_a.h of other3rdptylib, no name collision
#include <class_a.h> // not ProjA/mylib/class_a.h
#include <ProjA/mylib/library_private_helpers.h> // error can't find .h
.cpp
file e privata (visibile solo agli biblioteca immediato) .h
file sono memorizzati nella directory src (src è talvolta chiamato lib). I file di intestazione pubblici sono organizzati in una struttura di directory project/lib e inclusi tramite <ProjectName/LibraryName/headerName.h>
. I nomi dei file non sono preceduti da nulla. Se avessi mai avuto bisogno di impacchettare MyLib per essere usato da altri team, avrei potuto semplicemente cambiare il mio makefile per copiare i file binari appropriati e l'intera directory include/ProjA.
Una volta che i file vengono controllati nel controllo del codice sorgente e le persone iniziano a lavorarci, sarà difficile cambiare la struttura delle directory. È meglio farlo subito al via.
Chiunque abbia esperienza nell'organizzazione di codice sorgente come questo? Qualcosa che non ti piace a riguardo? Se hai un modo migliore per farlo, mi piacerebbe molto sentirlo.
Sono d'accordo che sarà eccessivo all'inizio. La mia preoccupazione è quando il progetto si avvia e la crescita a una dimensione decente, nessuno vorrà spendere il tempo per riorganizzare tutti i file e modificare tutti i percorsi di inclusione. –
Beh, potrebbe essere vero. Ma sembri desideroso di tenere tutto in ordine, quindi potresti farlo! Lavoro in un'azienda con circa 60 sviluppatori divisi in team. Un paio di settimane fa un certo numero di team ha trascorso alcuni giorni a riorganizzare i propri file. Mantenere le cose organizzate è un processo in corso .. un buon programmatore di refettori codifica quando diventa fuori controllo, ad esempio quando un file di codice diventa troppo grande da essere difficile da gestire, dovrebbero dividerlo. È lo stesso con una cartella di file. –
Questi team non avrebbero mai potuto prevedere 3 anni fa quale struttura avrebbero bisogno ora. Se avessero provato a indovinare, penso che avrebbero comunque dovuto riorganizzarsi. Quindi, non dovrei preoccuparmene. Se stai cercando di sviluppare una buona pratica all'inizio di un progetto, è meglio passare il tempo a inventare un buon metodo per testare il codice unitamente e come eseguire i test come parte di una build automatizzata ... perché il test unitario è sicuramente qualcosa di difficile da introdurre una volta che sei in corso. –