• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

QMainWindow: No such file or directory - cmake

42 Warsaw Coding Academy
0 głosów
351 wizyt
pytanie zadane 30 października 2021 w C i C++ przez Kabuuz Bywalec (2,820 p.)

Hej

Mam problem z projektem i użyciem CMake'a + Qt5. 
Struktura projektu:

├── CMakeLists.txt
├── inc
│   └── qtbasicapp
│       ├── app
│       │   ├── Application.hpp
│       │   ├── fwd.hpp
│       │   └── IApplication.hpp
│       └── windows
│           ├── fwd.hpp
│           ├── IWindow.hpp
│           ├── main
│           │   └── MainWindow.hpp
│           └── Window.hpp
├── src
│   ├── app
│   │   ├── Application.cpp
│   │   └── CMakeLists.txt
│   ├── CMakeLists.txt
│   ├── main.cpp
│   └── windows
│       ├── CMakeLists.txt
│       ├── main
│       │   ├── CMakeLists.txt
│       │   └── MainWindow.cpp
│       └── Window.cpp

CMakeLists.txt:

cmake_minimum_required(VERSION 3.5)

project(BasicProject LANGUAGES CXX)

add_subdirectory(dependencies)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(Qt5 COMPONENTS Widgets REQUIRED)

set(INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/inc)
set(DEPENDENCY_DIR ${CMAKE_CURRENT_SOURCE_DIR}/dependencies)
set(HEADERS_DIR ${INCLUDE_DIR})

add_subdirectory(src)
add_subdirectory(test)

src/CMakeLists.txt:

set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

add_subdirectory(app)
add_subdirectory(windows)

add_library(mainlib STATIC)

target_link_libraries(mainlib PUBLIC
    qtbasicapp_app_lib
    qtbasicapp_windows_lib
    qtbasicapp_windows_main_lib
    )

set(SOURCE_FILES
    ./main.cpp
)

add_executable(${PROJECT_NAME} ${SOURCE_FILES})

target_include_directories(${PROJECT_NAME}
    PUBLIC
    ${HEADERS_DIR}
    ${Qt5Widgets_INCLUDE_DIRS}
    )

target_link_libraries(${PROJECT_NAME}
    PUBLIC
    mainlib
    Qt5::Widgets
    )

src/windows/CMakeLists.txt

set(LIB_NAME qtbasicapp_windows_lib)

add_library(${LIB_NAME} OBJECT)

target_sources(${LIB_NAME}
    PUBLIC
    ${INCLUDE_DIR}/qtbasicapp/windows/fwd.hpp
    ${INCLUDE_DIR}/qtbasicapp/windows/IWindow.hpp
    ${INCLUDE_DIR}/qtbasicapp/windows/Window.hpp

    PRIVATE
    ${CMAKE_CURRENT_SOURCE_DIR}/Window.cpp
    )

target_include_directories(${LIB_NAME}
    PUBLIC
    ${HEADERS_DIR}
    )

target_compile_options(${LIB_NAME} PUBLIC -Werror -Wall -Wextra)

add_subdirectory(main)

src/windows/main/CMakeLists.txt

set(LIB_NAME qtbasicapp_windows_main_lib)

find_package(Qt5 COMPONENTS Widgets REQUIRED)

add_library(${LIB_NAME} OBJECT)

target_sources(${LIB_NAME}
        PUBLIC
        ${INCLUDE_DIR}/qtbasicapp/windows/main/MainWindow.hpp

        PRIVATE
        ${CMAKE_CURRENT_SOURCE_DIR}/MainWindow.cpp
        )

target_include_directories(${LIB_NAME}
        PUBLIC
        ${HEADERS_DIR}
        /usr/include/x86_64-linux-gnu/qt5/QtWidgets
        )

target_link_libraries(${LIB_NAME}
        PUBLIC
        Qt5::Widgets
        )

target_compile_options(${LIB_NAME} PUBLIC -Werror -Wall -Wextra)

Problem jest taki, że w pliku inc/qtbasicapp/windows/main/MainWindow.hpp robię #include <QMainWindow> i wyskakuje mi błąd: fatal error: QMainWindow: No such file or directory. Jeśli zrobię inny include (qt5/QtWidgets/QMainWindow) to wtedy błąd pojawia się głębiej w tych Qtkowych plikach (brak pliku <QtWidgets/qtwidgetsglobal.h>).

Co dziwniejsze (przynajmniej dla mnie) w pliku main.cpp jest #include <QApplication> i to działa bez zarzutu. Spróbowałem więc nie tworzyć dodatkowej biblioteki tylko wrzucić te pliki razem do add_executable, ale nadal nie widzi QMainWindow. 

Skoro widzi QApplication to sprawdziłem czy może to mogę zaincludować - też nie wykrywa chociaż  środowisko podpowiada mi wszystkie metody dla tego obiektu.

Wiecie może co jest nie tak/ co przekombinowałem?

 

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
0 odpowiedzi 489 wizyt
pytanie zadane 30 grudnia 2017 w C i C++ przez michaloxs Początkujący (280 p.)
0 głosów
1 odpowiedź 920 wizyt

93,395 zapytań

142,388 odpowiedzi

322,566 komentarzy

62,753 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...