Cmake nie działa w projekcie C++/Qt

0

Cześć!

Mam taki problem. Chcę stworzyć projekt C++/Qt oparty na cmake'u.
Chciałbym, żeby struktura katalogów projektu była taka, że mam na najwyższym poziomie main.cpp oraz podział na katalogi (libki?) i tam są takie katalogi jak np. gui, moduł1, moduł2, moduł3.
Obecnie dodałem tylko cmake'a głównego i drugiego dla katalogu gui, ale QtCreator pokazuje mi coś takiego:
screenshot-20210422201732.png

Główny cmake:
screenshot-20210422202338.png

Cmake w katalogu gui:
screenshot-20210422202436.png

Oczywiście wymienione pliki są w wymienionych katalogach.

Co się dzieje? Komenda cmake przechodzi, ale podczas kompilacji jest komunikat dla pliku MainWindow.h: No such file and directory.

To moje pierwsze doświadczenia z cmake'iem, dlatego proszę o rady i konstruktywną krytykę ;)

Pozdro!

1

Nie wklejaj screenów kodu!

Na oko: wyrzuć project i add_executable z GUI.
Podejrzewam też, do głównego CMakeLists.txt powinieneś dodać target_include_directories oraz target_link_libraries pokazujące na GUI.

PS. Ładny temat kolorystyczny ;) Gruvbox?

4

Nie bardzo rozumiem czemu tworzysz 2 targety dla modułu gui, jednego execa i bibliotekę. Czy gui będzie plikiem wykonywalnym? Jeśli nie, to add_executable jest chyba niepotrzebne. Tym bardziej że do dwóch targetów dodajesz te same źródła - ${headers}, ${sources}.

Poza tym nie widzę, byś dodał add_subdirectory do głównego cmake'a. O ile wiem, bez tego CMakeLists.txt z gui nie będzie sparsowany. Z drugiej strony piszesz, że nie znalazł MainWindow.h, który jest dodany tylko w CmakeLists.txt z gui, czyli jednak jest jakoś parsowany. Więc może parsujesz tylko wewnętrzny projekt?

1

Pytanie kolejne: czemu libka typu module?

1

nie widzę include_directories.

W razie czego na github są przykładowe cmake z qt zajrzyj. Pomogą ci zrozumieć konstrukcję.

3

Nie rozumiem: jak ktoś kto jest zarejestrowanym użytkownikiem od 6-ciu lat może zamieszczać tekst (kod cmake) jako obrazki?
Ktoś taki powinien już dobrze wiedzieć, że taka praktyka jest bardzo niemile widziana i kojarzona z .... (proszę sobie samemu wstawić z kim).

Co od samego tematu to:

  • nie widzę jawnego związku między "Główny cmake" a "Cmake w katalogu gui" - wygląda to jak dwa niezależne projekty. Chyba powinno być gdzieś jakieś add_subdirectory.
  • Wewnątrz "Cmake w katalogu gui" chyba powinien być jakiś konflikt symboli, bo w końcu masz tam takie wpisy:
add_executable(${module} ....
add_libarary(${module} ....
  • opisany błąd jest podczas kompilacji, a nie wiadomo co się kompilowało:
    • ani jaki target,
    • ani jaki plik tego targetu,
    • ani jak wyglądają powiązane linijki.
0

Przepraszam tych, których zirytował mój skrinszot ;)
Wiem, że nie powinno się tak robić, uznałem, że kod jest na tyle prosty, a czemu tak zdecydowałem? Powód jest prozaiczny - spieszyłem się, żeby uśpić dzieci. Sorry.

Do rzeczy - dzięki wszystkim za pomoc. Wyszedł brak doświadczenia.
Zostało mi przez przypadek w gui/cmake add_executable, co było błędem - usunąłem to, dalej, w głównym pliku trzeba było dodać add_subdirectory i zmieniłem typ libki z module na static.

Udanego weekendu wszystkim życzę i jeszcze raz - dzięki za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1