From 2feba4447a482840e21fa2d3b33f1a5da12d09b7 Mon Sep 17 00:00:00 2001 From: Fabien Proriol Date: Thu, 22 May 2025 17:10:35 +0200 Subject: qt: Add Qt Wrapper library and QML module --- CMakeLists.txt | 115 ++++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 90 insertions(+), 25 deletions(-) (limited to 'CMakeLists.txt') diff --git a/CMakeLists.txt b/CMakeLists.txt index acb7c5d..9d06877 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,34 +1,38 @@ cmake_minimum_required(VERSION 3.14) -project(KaZoe-Settings VERSION 1.0.0 LANGUAGES CXX) +project(KzSettings VERSION 1.0.0 LANGUAGES CXX) -option(WITH_PYTHON "Create python binding" ON) +option(WITH_PYTHON "Create python binding" ON) +option(WITH_QT "Create Qt6 library and QML Module" ON) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) +include(GNUInstallDirs) find_package (Threads REQUIRED) -add_library(KaZoeSettings SHARED - src/settings.h src/settings.cpp +add_library(KzSettings SHARED + src/kzsettings.h src/kzsettings.cpp src/changewatcher.h src/changewatcher.cpp + cmake/Config.cmake.in + cmake/CPack.cmake ) -set_target_properties(KaZoeSettings PROPERTIES VERSION ${CMAKE_PROJECT_VERSION} SOVERSION 1) -set_target_properties(KaZoeSettings PROPERTIES PUBLIC_HEADER "src/settings.h") -target_link_libraries(KaZoeSettings PRIVATE Threads::Threads) +set_target_properties(KzSettings PROPERTIES VERSION ${CMAKE_PROJECT_VERSION} SOVERSION 1) +set_target_properties(KzSettings PROPERTIES PUBLIC_HEADER "src/kzsettings.h") +target_link_libraries(KzSettings PRIVATE Threads::Threads) -add_executable(ksettings cmd/ksettings.cpp) -target_include_directories(ksettings PRIVATE src) -target_link_libraries(ksettings KaZoeSettings) +add_executable(kzsettings cmd/kzsettings.cpp) +target_include_directories(kzsettings PRIVATE src) +target_link_libraries(kzsettings KzSettings) -install(TARGETS KaZoeSettings - EXPORT "KaZoeSettingsTargets" +install(TARGETS KzSettings + EXPORT "KzSettingsTargets" LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_PREFIX}/include/KaZoe/" ) -install(TARGETS ksettings +install(TARGETS kzsettings LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} ) @@ -39,33 +43,94 @@ if(WITH_PYTHON) set(PYTHON_MODULE_EXTENSION ".so" CACHE INTERNAL "Cross python lib extension") find_package(pybind11 REQUIRED) include_directories(${Python3_INCLUDE_DIRS}) - pybind11_add_module(PyKaZoeSettings python/bindings.cpp) - set_target_properties(PyKaZoeSettings PROPERTIES OUTPUT_NAME "KaZoeSettings") - target_link_libraries(PyKaZoeSettings PUBLIC KaZoeSettings ${PYTHON_LIBRARY}) - install(TARGETS PyKaZoeSettings LIBRARY DESTINATION ${Python3_SITEARCH}) + pybind11_add_module(PyKzSettings python/bindings.cpp) + set_target_properties(PyKzSettings PROPERTIES OUTPUT_NAME "KzSettings") + target_link_libraries(PyKzSettings PUBLIC KzSettings ${PYTHON_LIBRARY}) + if(NOT PYTHONPATH) + set(PYTHONPATH ${Python3_SITEARCH}) + endif(NOT PYTHONPATH) + install(TARGETS PyKzSettings LIBRARY DESTINATION ${PYTHONPATH}) endif(WITH_PYTHON) -# CMake Module include(CMakePackageConfigHelpers) + +if(WITH_QT) + if(NOT DEFINED QML_MODULE_INSTALL_PATH) + if(DEFINED OE_QMAKE_PATH_QML) + set(QML_MODULE_INSTALL_PATH ${OE_QMAKE_PATH_QML} ) + else() + set(QML_MODULE_INSTALL_PATH ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/qml ) + endif() + endif() + message(STATUS "Build with Qt module in ${QML_MODULE_INSTALL_PATH}") + + find_package(Qt6 COMPONENTS Core Qml REQUIRED) + add_library(KzQSettings SHARED + qt/kzqsettings.h qt/kzqsettings.cpp + qt/kzqproperty.h qt/kzqproperty.cpp + qt/cmake/Config.cmake.in + ) + target_link_libraries(KzQSettings PUBLIC Qt6::Core KzSettings) + set_target_properties(KzQSettings PROPERTIES VERSION ${CMAKE_PROJECT_VERSION} SOVERSION 1) + set(KzQSettingsPublicHeader qt/kzqsettings.h qt/kzqproperty.h) + set_target_properties(KzQSettings PROPERTIES PUBLIC_HEADER "${KzQSettingsPublicHeader}") + install(TARGETS KzQSettings + EXPORT "KzQSettingsTargets" + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_PREFIX}/include/KaZoe/" + ) + write_basic_package_version_file( + "${CMAKE_CURRENT_BINARY_DIR}/generated/KzQSettingsConfigVersion.cmake" COMPATIBILITY SameMajorVersion + ) + + configure_package_config_file( + "qt/cmake/Config.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/generated/KzQSettingsConfig.cmake" + INSTALL_DESTINATION "lib/cmake/KzQSettings" + ) + + install( + FILES "${CMAKE_CURRENT_BINARY_DIR}/generated/KzQSettingsConfig.cmake" "${CMAKE_CURRENT_BINARY_DIR}/generated/KzQSettingsConfigVersion.cmake" + DESTINATION "lib/cmake/KzQSettings" + ) + + install( + EXPORT "KzQSettingsTargets" + DESTINATION "lib/cmake/KzQSettings" + ) + + set(PLUGIN_SOURCES + qt/kzqsettings_plugin.h qt/kzqsettings_plugin.cpp + qt/qml/qmldir + ) + + add_library(KzQSettingsPlugin SHARED ${PLUGIN_SOURCES}) + target_link_libraries(KzQSettingsPlugin PRIVATE Qt6::Qml KzQSettings) + install(TARGETS KzQSettingsPlugin DESTINATION ${QML_MODULE_INSTALL_PATH}/org/kazoe/settings) + install(FILES qt/qml/qmldir DESTINATION ${QML_MODULE_INSTALL_PATH}/org/kazoe/settings) +endif(WITH_QT) + + write_basic_package_version_file( - "${CMAKE_CURRENT_BINARY_DIR}/generated/KaZoeSettingsConfigVersion.cmake" COMPATIBILITY SameMajorVersion + "${CMAKE_CURRENT_BINARY_DIR}/generated/KzSettingsConfigVersion.cmake" COMPATIBILITY SameMajorVersion ) configure_package_config_file( "cmake/Config.cmake.in" - "${CMAKE_CURRENT_BINARY_DIR}/generated/KaZoeSettingsConfig.cmake" - INSTALL_DESTINATION "lib/cmake/${PROJECT_NAME}" + "${CMAKE_CURRENT_BINARY_DIR}/generated/KzSettingsConfig.cmake" + INSTALL_DESTINATION "lib/cmake/KzSettings" ) install( - FILES "${CMAKE_CURRENT_BINARY_DIR}/generated/KaZoeSettingsConfig.cmake" "${CMAKE_CURRENT_BINARY_DIR}/generated/KaZoeSettingsConfigVersion.cmake" - DESTINATION "lib/cmake/${PROJECT_NAME}" + FILES "${CMAKE_CURRENT_BINARY_DIR}/generated/KzSettingsConfig.cmake" "${CMAKE_CURRENT_BINARY_DIR}/generated/KzSettingsConfigVersion.cmake" + DESTINATION "lib/cmake/KzSettings" ) install( - EXPORT "KaZoeSettingsTargets" - DESTINATION "lib/cmake/${PROJECT_NAME}" + EXPORT "KzSettingsTargets" + DESTINATION "lib/cmake/KzSettings" ) include(cmake/CPack.cmake) -- cgit v1.2.3