• 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

VPS Starter Arubacloud
0 głosów
282 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 408 wizyt
pytanie zadane 30 grudnia 2017 w C i C++ przez michaloxs Początkujący (280 p.)
0 głosów
1 odpowiedź 618 wizyt

92,454 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 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.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...