Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[cmake] Jak napisać cmake ?

Ostatnio zmodyfikowano 2025-06-15 11:31
Autor Wiadomość
nanoant20
» 2025-06-12 08:00:30
bo jak zrobiłem
target_include_directories(${PROJECT_NAME} PRIVATE
    EasyNotepad/SFML_intro.hpp
)
to mi nie dodawało headerów :-/

polecam robić research dokumentacji.

sama nazwa funkcji "target_include_directories" jest wymowna, jednoznaczna i dobrze odzwierciedla jej działanie.

funkcja "target_include_directories" w CMake służy do wskazywania folderów/katalogów , które zawierają pliki nagłówkowe (.h lub .hpp), a nie wskazywania samych plików.
P-182538
jankowalski25
» 2025-06-15 07:59:01
Zamiast dodawać pliki nagłówkowe (.hpp) do target_sources, powinieneś użyć target_include_directories, aby wskazać katalog, w którym znajdują się te pliki.
Trzeba zrobić jedno i drugie. Samo "target_include_directories" jest po to, żeby kompilator wiedział, jak to poskładać. Natomiast pliki nagłówkowe trzeba dodawać tak samo, jak pliki źródłowe, bo inaczej nie będą widoczne w IDE. Visual Studio, podobnie jak Code::Blocks, nie pokaże plików nagłówkowych w plikach projektu, jeśli nie zostaną ręcznie dołączone.

Zresztą, ma to sens, jak to porównasz z używaniem IDE bez CMake'a, tam też działa to tak samo: możesz mieć projekt z samymi plikami źródłowymi i odpowiednio ustawionymi ścieżkami do nagłówków. Zbuduje się i zadziała, ale jak zechcesz sięgnąć do nagłówków i je sobie poczytać, to będzie to niewygodne, jak w drzewku plików i folderów ich nie będzie. Dlatego też nagłówki trzeba dołączać tak samo, jak pliki źródłowe. Zwykle IDE jest na tyle sprytne, żeby nie próbować budować samych nagłówków, podobnie jak to się dzieje w sytuacji, gdy je dorzucisz do projektu bez dotykania CMake'a.

Dopisano:
Zresztą, jest jeszcze jeden powód, dlaczego pliki *.hpp trzeba wymieniać tak samo, jak pliki *.cpp. Otóż: możesz mieć różne targety. I każdy z nich może sięgać po różne pliki. CMake nie przejedzie rekursywnie folderu z nagłówkami i nie dołączy wszystkiego jak leci (chyba że napiszesz pętlę w CMake'u, która to jawnie zrobi). Są przypadki, gdzie konkretnych plików możesz nie chcieć dołączyć w danym targecie i wtedy widać wyraźnie, że na szczęście to nie jest robione automatycznie.
P-182547
nanoant20
» 2025-06-15 11:31:28
@jankowalski25 V.I.P.
ogólnie zgadzam się , "CMakeLists.txt" trzeba konfigurować / dostosowywać do konkretnego projektu

Natomiast pliki nagłówkowe trzeba dodawać tak samo, jak pliki źródłowe, bo inaczej nie będą widoczne w IDE. Visual Studio, podobnie jak Code::Blocks, nie pokaże plików nagłówkowych w plikach projektu, jeśli nie zostaną ręcznie dołączone
wiem , że powyższy cytat odnosi się do "target_include_directories" i skróciłem go na własne potrzeby, więc proszę nie uważać , że to jest nadmierna drobiazgowość.

przeglądając "CMakeLists.txt" z SFML-2.6.2-sources.zip można natrafić na funkcję
file(GLOB ...
 w linijkach 161,162 i 163 a w linijce 165 jest pętla
foreach
, która automatyzuje proces dodawania wielu plików

ponieważ użytkownik @tBane ma w 1 katalogu/folderze o nazwie "EasyNotepad" pliki nagłówkowe i źródłowe
-Easy Notepad
|--main.cpp
|--SFML_intro.hpp

dodałem 2 linijki do "CMakeLists.txt" zamieszczonego wcześniej w tym wątku, oto one :
file(GLOB HEADER_FILES "EasyNotepad/*.hpp")
# ... i zmiana w linijce
add_executable(${PROJECT_NAME} ${SOURCES} ${HEADER_FILES})
po skonfigurowaniu CMake (cmake-gui) dla
CodeBlocks - MinGW Makefiles
 utworzy się plik "EasyNotepad.cbp"
po otworzeniu go w Code::Blocks w oknie Management / Projects  dla projektu EasyNotepad będą widoczne 3 foldery/katalogi : "CMake Files", "Sources" i "Headers" , a w nich odpowiednie pliki

P.S.
jeżeli ktoś używa interfejsu graficznego "CMake (cmake-gui)" po kliknięciu na "Configure" należy odnaleźć "CMAKE_BUILD_TYPE" i dodać wpis "Release" lub "Debug".
Można też dodać samodzielnie wpis do "CMakeLists.txt" np. tak jak to jest w "CMakeLists.txt" w źródłach "SFML-2.6.2-sources" linijka nr. 17

nie testowane dla VS
 









 


 









 
P-182548
1 2 3 4 « 5 »
Poprzednia strona Strona 5 z 5