Cześć,
Dotychczas w przypadku pisania czegoś z cpp prawie zawsze korzystałem z środowiska Visuala, potrafię jednak skompilować coś z linii komend czy napisać jakiegoś prostego makefile który pozałącza jakieś zewnętrzne biblioteki (tutaj już mowa o jakimś linuxie/Mingw/wsl). Chciałem teraz wrzucić jakiś projekt na githuba co wiąże się z tym, że wypada, żeby to wszystko (cały projekt) jakoś wyglądało. Wiąże się z tym struktura projektu a także utworzenie pliku cmake. Dotychczas w visualu wszystkie pliki .h (.hpp) oraz *.cpp trzymane są w jednym katalogu, linkowanie bibliotek to klikanie guzików itp., jest to mało wymagające i nie wymaga jakoś szczególnie dbania o strukturę projektu. Teraz mam parę pytań co do tego jak powinien dobrze prezentować się projekt w CPP umieszczony na githubie.
-
Czy umieszczenie pliku makefile, albo pliku cmake jest standardem? Jaki jest cel umieszczania takiego pliku? Czy powinien on umożliwić zbudowanie projektu 'od tak', czy powinien on umożliwić zbudowanie projektu gdy spełnione są odpowiednie warunki np. odpowiedzialność za posiadanie odpowiednich bibliotek spada na użytkownika który chce zbudować mój projekt.
-
Co z bibliotekami (zewnętrznymi)? Czy przykładowo w strukturze projektu powinienem utworzyć folder lib w którym będą skompilowane biblioteki? Rozumiem, że nie powinny być one trzymane w repo (zależność od systemu)? Przeglądając projekty na githubie widzę, że albo nie ma takiego katalogu, albo on jest i zawiera skompilowane biblioteki, albo jest i zawiera źródła tych bibliotek (czyli to by dawało największą elastyczność, każdy może zaciągnąć wszystko jako piliki źródłowe i skompilować u siebie wymagane biblioteki i pliki źródłowe mojego programu przy pomocy cmake? Ale przecież nie zawsze jest to możliwe, źródła chyba nie zawsze są udostępniane...)
-
Co z dll'kami (.so)? Normalnie ręcznie kopiuje je tam gdzie plik wykonywalny, teraz jeśli ktoś chce zbudować mój projekt to na niego spada odpowiedzialność, żeby je tam umieścił? Czy może jeśli mam pliki źródłowe w katalogu np. lib to skrypt cmake powinien zbudować taką bibliotekę i skopiowiać tam dll'ki?
-
Często w strukturach projektu znajduje się katalog include, czy powinny się tam znaleźć pliki nagłówkowe bibliotek zewnętrznych czy może mojego projektu?
-
Przykładowo - używam CUDA, rozumiem, że skrypt budujący powinien sprawdzić czy dostępna jest ta technologia i w razie czego poinformować użytkownika o jej braku?
-
Wreszcie jak powinna wyglądać struktura projektu, tak aby "nie było wstydu tego umieścić"? Czy to powinno mniej więcej tak wyglądać? Pomijam katalogi typu doc, test czy pliki typu .gitignore.
--src <- moje pliki .cpp
--include <- moje pliki .hpp
--lib <- wszystko związanego z zewnętrznymi bibliotekami (folder nie przechowywany w repo)
--include
--sfml <- headery bibliotek
--glfw itp...<-
--sfml <- skompilowane biblioteki
--glfw itp... <-
--bin <- plik z zbudowanym plikiem wykonywalnym (folder nie przechowywany w repo)
--release
--debug
--plik cmake <- zbuduje program o ile użytkownik sam skonfiguruje to co potrzebne (np. będzie miał wymagane biblioteki)