Struktura projektu w C++

Struktura projektu w C++
whiteman808
  • Rejestracja:ponad rok
  • Ostatnio:5 dni
  • Postów:133
0

Potrzebuję wskazówek jak ogarnąć strukturę większych programów, w sensie podział na pliki nagłówków, testy, źródełka, dokumentację itd. Macie jakieś sensowne sprawdzone sposoby na to? Pytanie kieruję do osób, które mają już trochę doświadczenia z C++

Pytam bo mi się zaczął programik rozrastać i trzymanie wszystkiego w jednym katalogu z Makefile, CPPLINT.cfg itd. jest mało praktyczne

SL
  • Rejestracja:około 7 lat
  • Ostatnio:około 8 godzin
  • Postów:900
1

Kod trzymasz w jednym miejscu. Podział na src/include nie ma żadnego sensu poza pisaniem bibliotek (choć tam przerzucenie headerów do osobnego katalogu powinien robić skrypt budujący). Testy oczywiście też, dokumentacje to zależy od gustu

Najważniejsza jest oczywiście dobra modularyzacja. Niestety nie wiem w jaki sposób dobrze to opisać

Makefile

Ogarnij CMake albo inny system, który ogarnia dużo za ciebie

CPPLINT.cfg

To chyba jakiś staroć. Polecam clang-format i clang-tidy

lion137
  • Rejestracja:około 8 lat
  • Ostatnio:około godziny
  • Postów:4936
0

MarekR22
Moderator C/C++
  • Rejestracja:ponad 17 lat
  • Ostatnio:2 minuty
5

Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 1x, ostatnio: MarekR22
RE
4p mi się zawisiło a chciałem wrzucic link do gh. bardzo dobry template zapewnia jason.
K1
  • Rejestracja:ponad 2 lata
  • Ostatnio:około 11 godzin
  • Postów:49
0

Ja w swojej bibliotece rozdzieliłem sobie na kilka projektów w osobnych folderach, każdy od innego zbioru funkcjonalności + przykładowe użycie. Dodatkowe pliki można dać gdzieś w osobnym folderze, chyba, że są ściśle powiązane z którąś częścią projektu, wtedy w odpowiednim folderze dla tej części. Może też być po prostu w katalogu nadrzędnym. Opcjonalnie do tego podział na nagłówki i źródła. Powinno wystarczyć. Jak to nie biblioteka, to też można poszczególne funkcjonalności do osobnych folderów, tylko w 1 projekcie a nie kilku.


"C sprawia, że łatwo jest sobie strzelić w stopę. Z C++ jest to trudniejsze, ale za to w razie czego odstrzelisz sobie całą nogę"- Bjarne Stroustrup.
"A w C# jest to prawie niemożliwe, ale w razie czego strzelisz sobie w łeb" - Ja
Wniosek: im wyższy poziom abstrakcji, tym rzadziej występują błędy, lecz tym większe niosą konsekwencje
several
  • Rejestracja:prawie 16 lat
  • Ostatnio:około 4 godziny
1

choć tam przerzucenie headerów do osobnego katalogu powinien robić skrypt budujący

Brzmi jak dodawanie sobie roboty na siłę i tworzenie niepotrzebnej złożoności. Nie znam żadnej prominentnej biblioteki, która by tak robiła. Jeśli masz bibliotekę i folder include ma istnieć to lepiej od razu wrzucić tam to, co ma tam być interfejsem. Robi tak OpenCV i OpenSSL na przykład. Klarownie masz wtedy opisany interfejs, dla dewelopera i użytkownika, od razu wiadomo skąd brać inkludy do jakiejś paczki dystrybucyjnej itd.

Nie widzę żadnych zalet dodatkowego skryptu którego jedyny zadaniem byłoby wyłuskiwanie plików tylko po to, żeby je skopiować z folderu do folderu w obrębie jednego repo.


RE
include to najważniejszy jest dla kroków instalacyjnych. Takie skrypty to proszenie się o kłopoty.
Marius.Maximus
  • Rejestracja:ponad 14 lat
  • Ostatnio:około 15 godzin
  • Postów:2100
4

@whiteman808: Zacznij od podstaw cmake , to co zaproponował @MarekR22 jest na pewno bardzo przydatne ale trzeba mieć odpowiednie podstawy aby to zrozumieć/używać.
Jak zaczniesz korzystać ze zbyt skomplikowanych szablonów to w przypadku banalnej usterki nie będziesz wiedział jak to naprawić i łatwo możesz popełnić duży błąd rezygnując z cmake bo się zniechęcisz do narzędzia

Na początek to bym zaczynał od podstaw związanych z dodaniem projektu aplikacji/biblioteki oraz jak poustawiać parametry targetu

Kopiuj
add_executable
add_library
add_subdirectory
target_link_libraries
target_include_directories
target_compile_definitions
target_compile_features

chatGPT może być Twoim nauczycielem ;)


--
Nie przyjmuję reklamacji za moje rady, używasz na własną odpowiedzialność.
Programowanie bez formatowania to jak chodzenie ze spodniami spuszczonymi na kostki. Owszem da się ale po pierwsze nie wygodne, po drugie nieprzyzwoicie wygląda.
Przed zaczęciem nowego wątku przeczytam problem XY

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.