sziasztok!
pár hónapja kezdtem a C++-t, de már van egy >7000 soros diplomamunka-programom benne (sok header- és forrás-fájlba szétdarabolva). a gondom viszont az, h nem tanultam meg rendesen / nem találtam részletes infót, példákat arra, hogyan illik a nagyobb méretű kódokat struktúrálni:
- miket szokás külön .hpp/.cpp fájlokba tenni (minden class-t, összetartozó classokat, stb)
- mekkora egységekből csináljak libraryt (static vs dynamic?)
- mi a legelterjedtebb könyvtárstruktúra, ahogy a forrást struktúrálni szokás (kész statikus libraryket hova helyezni
benne, pl statikusan fordított, threaded fftw3)
- stb.
ezek a kérdések most jöttek elő hangsúlyosabban, h sima makefile-os forgatásról megpróbáltam elmozdulni cmake felé.
Tudtok olyan jó irodalmat ajánlani, ami foglalkozik a fenti kérdéskörökkel?
kösz
Hozzászólások
http://www.softwaresphere.com/physdescpp/
http://www.astahost.com/info.php/Organizing-Project-Files-Large-Project…
http://www.oualline.com/style/c01.html
Kezdd úgy, hogy egy osztály egy fájl.
.hpp-be megy a deklaráció
.cpp-be a definíció.
Ha így csinálod, ez több okból jó. Pl. átlátható, pl. egy osztály változásakor nem fordul feleslegesen le sokminden más, csak ami függ tőle.
Aztán úgyis lesznek apró osztályaid, amik miatt nem fogsz külön fájlt kezdeni, mert annyira össze van nőve logikailag egy másikkal, és azokat majd egy fájlba teszed.
Ettől nem lesz jobb, de a lustaság mindig győzedelmeskedik :-)
Library - én funkciók alapján vágnám. De van olyan lib is, ami fradista: mindentbele.
Ez kb. mindegy. Itt is azért jó itt-ott szétvágni, mert ha egy dolog változik, akkor nem kell mindent újra fordítani, újra linkelni.
Amik pl. egyáltalán nem tartoznak össze, azokat felesleges egy libbe tenni. De persze szabad.
forrás fájl struktúra... ez projekttől függ. Ha én most kezdenék valami nagyot és komplexet, sok libbel, stb. Akkor a külön linkelt részek külön könyvtárba mennének (tehát minden lib külön könyvtár (és a verziókezelő rendszerben is külön projekt)).
De egyébként ez szinte mindegy.
G
Kösz mindenkinek a linkeket, tippeket, nagyon hasznosak!
gee, átstruktúráltam a kódot, mielőtt olvastam volna a hozzászólásod, és pont így csináltam én is. külön lib, külön könyvtár, osztályok általában külön hpp/cpp fájlba, stb. Örülök, h egy véleményen vagyunk :)
.hpp kiterjesztest el lehet felejteni, eleg a sima .h, mert ugyis include lesz az.
A headerekbe az osztalyok / fugvenyek szignaturai kerulnek, a cpp fajlba pedig maga az implementacios kod.
Forrasfa strukturaban en egy kimenetu dolognal az autoconf felepitmenyet kedvelem (src mappa, abba a kod omlesztve), tobbkimenetesnel (tehat ha mar shared libek is jonnek letre), akkor vagy egy libs mappa a src melle, vagy (ha pl. pluginokrol van szo) egy plugins mappa, mindenesetre belejuk libenkent kulon elnevezett mappak, bele kod (libizehoze.so eseten a mappa neve izehoze).
CMake-t en is most tanulgatom, a cmake.org-os dokumentacio eleg reszletes, szerintem annal jobb nem kell. Nezegesd esetleg a /usr/share/cmake/Modules mappaba levo cmake modulokat, abbol hihetetlen sokat lehet okulni.
KDevelop4 gozerovel a cmake-t tamogatja, igy erdemes azzal hasznalni, rengeteg josag benne.
--