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?