• 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

HackNation - ogólnopolski hackathon
0 głosów
411 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 521 wizyt
pytanie zadane 30 grudnia 2017 w C i C++ przez michaloxs Początkujący (280 p.)
0 głosów
1 odpowiedź 997 wizyt

93,628 zapytań

142,551 odpowiedzi

323,052 komentarzy

63,134 pasjonatów

Advent of Code 2025

Top 15 użytkowników

  1. 1936p. - dia-Chann
  2. 1916p. - DziarnowskiJ
  3. 1886p. - Łukasz Piwowar
  4. 1841p. - raydeal
  5. 1840p. - Adrian Wieprzkowicz
  6. 1782p. - rucin93
  7. 1640p. - CC PL
  8. 1616p. - Maurycy W
  9. 1588p. - Tomasz Bielak
  10. 1521p. - Michal Drewniak
  11. 1491p. - Rafał Trójniak
  12. 1471p. - rafalszastok
  13. 1444p. - robwarsz
  14. 1257p. - ssynowiec
  15. 1208p. - Mariusz Fornal
Szczegóły i pełne wyniki

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

Kursy INF.02 i INF.03
...