cmake: support ninja multi-config

Fixes: #231
This commit is contained in:
Yuhang Zhao 2023-06-30 16:19:17 +08:00
parent 6ccb25db0a
commit 2a49e9fcaf
10 changed files with 164 additions and 471 deletions

View File

@ -32,6 +32,7 @@ project(FramelessHelper
include(CMakeDependentOption)
# TODO: Use add_feature_info() for every option below? Is it worth doing?
option(FRAMELESSHELPER_BUILD_STATIC "Build FramelessHelper as a static library." OFF)
option(FRAMELESSHELPER_BUILD_WIDGETS "Build FramelessHelper's Widgets module." ON)
option(FRAMELESSHELPER_BUILD_QUICK "Build FramelessHelper's Quick module." ON)
@ -121,6 +122,9 @@ if(MSVC)
endif()
endif()
if(FRAMELESSHELPER_ENABLE_YYTHUNKS)
unset(YYTHUNKS_TARGET_OS)
unset(YYTHUNKS_TARGET_OS CACHE)
#unset(YYTHUNKS_TARGET_OS PARENT_SCOPE)
set(YYTHUNKS_TARGET_OS "WinXP" CACHE STRING "" FORCE)
include(cmake/YY-Thunks.cmake)
endif()

View File

@ -28,12 +28,7 @@ set(_@PROJECT_NAME@_supported_components Core Widgets Quick)
foreach(_comp ${@PROJECT_NAME@_FIND_COMPONENTS})
if(_comp IN_LIST _@PROJECT_NAME@_supported_components)
set(__proj_name "@PROJECT_NAME@${_comp}")
cmake_path(GET CMAKE_CURRENT_LIST_FILE PARENT_PATH __imp_prefix)
cmake_path(GET __imp_prefix PARENT_PATH __imp_prefix)
include("${__imp_prefix}/${__proj_name}/${__proj_name}Config.cmake")
unset(__imp_prefix)
unset(__proj_name)
include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@${_comp}Config.cmake")
else()
set(@PROJECT_NAME@_FOUND FALSE)
set(@PROJECT_NAME@_NOT_FOUND_MESSAGE "Unsupported component: ${_comp}")
@ -52,3 +47,9 @@ if(NOT DEFINED @PROJECT_NAME@_FOUND)
set(@PROJECT_NAME@_COMMIT "@PROJECT_VERSION_COMMIT@")
set(@PROJECT_NAME@_COMPILE_DATETIME "@PROJECT_COMPILE_DATETIME@")
endif()
include(FeatureSummary)
set_package_properties(@PROJECT_NAME@ PROPERTIES
DESCRIPTION "@PROJECT_DESCRIPTION@"
URL "@PROJECT_HOMEPAGE_URL@"
)

View File

@ -1,59 +0,0 @@
#[[
MIT License
Copyright (C) 2021-2023 by wangwenx190 (Yuhang Zhao)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
]]
if(NOT DEFINED @SUB_PROJ_NAME@_FOUND)
set(@SUB_PROJ_NAME@_FOUND TRUE)
endif()
if(@SUB_PROJ_NAME@_FOUND)
include("${CMAKE_CURRENT_LIST_DIR}/@SUB_PROJ_NAME@Targets.cmake")
endif()
if(TARGET @PROJECT_NAME@::@SUB_MOD_NAME@)
set(@SUB_PROJ_NAME@_LIBRARIES @PROJECT_NAME@::@SUB_MOD_NAME@)
get_target_property(@SUB_PROJ_NAME@_VERSION @PROJECT_NAME@::@SUB_MOD_NAME@ VERSION)
if(NOT @SUB_PROJ_NAME@_VERSION)
set(@SUB_PROJ_NAME@_VERSION "")
endif()
get_target_property(@SUB_PROJ_NAME@_INCLUDE_DIRS @PROJECT_NAME@::@SUB_MOD_NAME@ INTERFACE_INCLUDE_DIRECTORIES)
if(NOT @SUB_PROJ_NAME@_INCLUDE_DIRS)
set(@SUB_PROJ_NAME@_INCLUDE_DIRS "")
endif()
get_target_property(@SUB_PROJ_NAME@_DEFINITIONS @PROJECT_NAME@::@SUB_MOD_NAME@ INTERFACE_COMPILE_DEFINITIONS)
if(NOT @SUB_PROJ_NAME@_DEFINITIONS)
set(@SUB_PROJ_NAME@_DEFINITIONS "")
else()
list(TRANSFORM @SUB_PROJ_NAME@_DEFINITIONS PREPEND "-D")
endif()
get_target_property(@SUB_PROJ_NAME@_COMPILE_DEFINITIONS @PROJECT_NAME@::@SUB_MOD_NAME@ INTERFACE_COMPILE_DEFINITIONS)
if(NOT @SUB_PROJ_NAME@_COMPILE_DEFINITIONS)
set(@SUB_PROJ_NAME@_COMPILE_DEFINITIONS "")
endif()
list(REMOVE_DUPLICATES @SUB_PROJ_NAME@_INCLUDE_DIRS)
list(REMOVE_DUPLICATES @SUB_PROJ_NAME@_DEFINITIONS)
list(REMOVE_DUPLICATES @SUB_PROJ_NAME@_COMPILE_DEFINITIONS)
else()
set(@SUB_PROJ_NAME@_FOUND FALSE)
set(@SUB_PROJ_NAME@_NOT_FOUND_MESSAGE "Target \"@PROJECT_NAME@::@SUB_MOD_NAME@\" was not found.")
endif()

View File

@ -1,47 +0,0 @@
#[[
MIT License
Copyright (C) 2021-2023 by wangwenx190 (Yuhang Zhao)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
]]
if(NOT TARGET @PROJECT_NAME@::@SUB_MOD_NAME@)
cmake_path(GET CMAKE_CURRENT_LIST_FILE PARENT_PATH __import_prefix)
cmake_path(GET __import_prefix PARENT_PATH __import_prefix)
cmake_path(GET __import_prefix PARENT_PATH __import_prefix)
cmake_path(GET __import_prefix PARENT_PATH __import_prefix)
if(__import_prefix STREQUAL "/")
set(__import_prefix "")
endif()
add_library(@SUB_PROJ_NAME@ @SUB_MOD_LIB_TYPE@ IMPORTED)
add_library(@PROJECT_NAME@::@SUB_MOD_NAME@ ALIAS @SUB_PROJ_NAME@)
set_target_properties(@SUB_PROJ_NAME@ PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${__import_prefix}/include;${__import_prefix}/include/@PROJECT_NAME@;${__import_prefix}/include/@SUB_PROJ_PATH@;${__import_prefix}/include/@SUB_PROJ_PATH@/private"
INTERFACE_COMPILE_DEFINITIONS "@SUB_MOD_DEFS@"
IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
IMPORTED_LOCATION "${__import_prefix}/@SUB_MOD_LIB_DIR@/@SUB_MOD_FILE_NAME@"
IMPORTED_IMPLIB "${__import_prefix}/lib/@SUB_MOD_IMPLIB_FILE_NAME@"
VERSION "@PROJECT_VERSION@"
SOVERSION "@PROJECT_VERSION_MAJOR@"
__COMMIT "@PROJECT_VERSION_COMMIT@"
__COMPILE_DATETIME "@PROJECT_COMPILE_DATETIME@"
)
unset(__import_prefix)
endif()

View File

@ -147,7 +147,7 @@ cmake -DQt5_DIR=C:/Qt/5.15.2/msvc2019_64/lib/cmake/Qt5 [other parameters ...]
If there are any errors when cloning the submodules, try run `git submodule update --init --recursive --remote` in the project directory, that command will download & update all the submodules. If it fails again, try execute it multiple times until it finally succeeds.
Once the compilation and installation is done, you will be able to use the `find_package(FramelessHelper REQUIRED COMPONENTS Core Widgets Quick)` command to find and link to the FramelessHelper library. But before doing that, please make sure CMake knows where to find FramelessHelper, by passing the `CMAKE_PREFIX_PATH` variable to it. For example: `-DCMAKE_PREFIX_PATH=C:/my-cmake-packages;C:/my-toolchain;etc...`. Build FramelessHelper as a sub-directory of your CMake project is of course also supported. The supported FramelessHelper target names are `FramelessHelper::Core`, `FramelessHelper::Widgets` and `FramelessHelper::Quick`. Example code:
Once the compilation and installation is done, you will be able to use the `find_package(FramelessHelper REQUIRED COMPONENTS Core Widgets Quick)` command to find and link to the FramelessHelper library. But before doing that, please make sure CMake knows where to find FramelessHelper, by passing the `CMAKE_PREFIX_PATH` or `FramelessHelper_DIR` variable to it. For example: `-DCMAKE_PREFIX_PATH=C:/my-cmake-packages;C:/my-toolchain;etc...` or `-DFramelessHelper_DIR=C:/Projects/FramelessHelper/lib64/cmake/FramelessHelper`. Build FramelessHelper as a sub-directory of your CMake project is of course also supported. The supported FramelessHelper target names are `FramelessHelper::Core`, `FramelessHelper::Widgets` and `FramelessHelper::Quick`. Example code:
```cmake
# Find Qt:
@ -182,8 +182,6 @@ list(REMOVE_DUPLICATES QML_IMPORT_PATH)
set(QML_IMPORT_PATH ${QML_IMPORT_PATH} CACHE STRING "Qt Creator extra QML import paths" FORCE)
```
**IMPORTANT NOTE**: Currently *Ninja Multi-Config* is known to be **NOT** supported, you can only build one single configuration at a time, however, I'm planning to support it as soon as possible, in a future version.
## Use
### Qt Widgets

2
cmake

@ -1 +1 @@
Subproject commit 35a5dbbb0ea3fe1431c1dbf75d4bc329c86d61e5
Subproject commit f41e3f888db144b5d30a3bd8d227905a391531f1

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<LibraryPath>$(MSBuildThisFileDirectory)lib;$(LibraryPath)</LibraryPath>
<LibraryPath>$(MSBuildThisFileDirectory)lib64;$(MSBuildThisFileDirectory)lib64\debug;$(MSBuildThisFileDirectory)lib64\release;$(LibraryPath)</LibraryPath>
</PropertyGroup>
<PropertyGroup Label="QtSettings">
<QtHeaderSearchPath>$(MSBuildThisFileDirectory)include;$(MSBuildThisFileDirectory)include\FramelessHelper;$(MSBuildThisFileDirectory)include\FramelessHelper\Core;$(MSBuildThisFileDirectory)include\FramelessHelper\Core\private;$(MSBuildThisFileDirectory)include\FramelessHelper\Widgets;$(MSBuildThisFileDirectory)include\FramelessHelper\Widgets\private;$(MSBuildThisFileDirectory)include\FramelessHelper\Quick;$(MSBuildThisFileDirectory)include\FramelessHelper\Quick\private;$(QtHeaderSearchPath)</QtHeaderSearchPath>

View File

@ -52,11 +52,11 @@ if(UNIX AND NOT APPLE)
endif()
endif()
set(SUB_MOD_NAME Core)
set(SUB_PROJ_NAME ${PROJECT_NAME}${SUB_MOD_NAME})
set(SUB_PROJ_PATH ${PROJECT_NAME}/${SUB_MOD_NAME})
set(SUB_MODULE Core)
set(SUB_MODULE_FULL_NAME ${PROJECT_NAME}${SUB_MODULE})
set(SUB_MODULE_PATH ${PROJECT_NAME}/${SUB_MODULE})
set(INCLUDE_PREFIX ../../include/${SUB_PROJ_PATH})
set(INCLUDE_PREFIX ../../include/${SUB_MODULE_PATH})
configure_file(framelesshelper.version.in
${CMAKE_CURRENT_BINARY_DIR}/framelesshelper.version @ONLY)
@ -142,18 +142,20 @@ elseif(UNIX)
endif()
if(WIN32 AND NOT FRAMELESSHELPER_BUILD_STATIC)
set(__rc_path "${CMAKE_CURRENT_BINARY_DIR}/${SUB_PROJ_NAME}.rc")
set(__rc_path "${CMAKE_CURRENT_BINARY_DIR}/${SUB_MODULE_FULL_NAME}.rc")
if(NOT EXISTS "${__rc_path}")
generate_win32_rc_file(
PATH "${__rc_path}"
VERSION "${PROJECT_VERSION}"
COMPANY "wangwenx190"
DESCRIPTION "${PROJECT_NAME} ${SUB_MOD_NAME} Module"
DESCRIPTION "${PROJECT_NAME} ${SUB_MODULE} Module"
COPYRIGHT "MIT License"
ORIGINAL_FILENAME "${PROJECT_NAME}${SUB_MOD_NAME}.dll"
ORIGINAL_FILENAME "${PROJECT_NAME}${SUB_MODULE}.dll"
PRODUCT "${PROJECT_NAME}"
COMMENTS "Built from commit ${PROJECT_VERSION_COMMIT} on ${PROJECT_COMPILE_DATETIME} (UTC)."
LIBRARY
)
endif()
list(APPEND SOURCES "${__rc_path}")
endif()
@ -164,63 +166,20 @@ if(FRAMELESSHELPER_BUILD_STATIC)
else()
set(SUB_MOD_LIB_TYPE "SHARED")
endif()
add_library(${SUB_PROJ_NAME} ${SUB_MOD_LIB_TYPE} ${ALL_SOURCES})
add_library(${PROJECT_NAME}::${SUB_PROJ_NAME} ALIAS ${SUB_PROJ_NAME})
add_library(${PROJECT_NAME}::${SUB_MOD_NAME} ALIAS ${SUB_PROJ_NAME})
add_library(${SUB_MODULE} ${SUB_MOD_LIB_TYPE} ${ALL_SOURCES})
add_library(${SUB_MODULE_FULL_NAME} ALIAS ${SUB_MODULE})
add_library(${PROJECT_NAME}::${SUB_MODULE} ALIAS ${SUB_MODULE})
add_library(${PROJECT_NAME}::${SUB_MODULE_FULL_NAME} ALIAS ${SUB_MODULE})
set_target_properties(${SUB_PROJ_NAME} PROPERTIES
set_target_properties(${SUB_MODULE} PROPERTIES
VERSION "${PROJECT_VERSION}"
SOVERSION "${PROJECT_VERSION_MAJOR}"
OUTPUT_NAME "${SUB_MODULE_FULL_NAME}"
)
set(SUB_MOD_TARGETS ${SUB_PROJ_NAME})
if(WIN32 AND NOT FRAMELESSHELPER_BUILD_STATIC)
set(SUB_MOD_LIB_DIR "${CMAKE_INSTALL_BINDIR}")
else()
set(SUB_MOD_LIB_DIR "${CMAKE_INSTALL_LIBDIR}")
endif()
set(SUB_MOD_FILE_PREFIX "")
if(NOT MSVC)
set(SUB_MOD_FILE_PREFIX "lib")
endif()
set(SUB_MOD_FILE_SUFFIX "")
set(SUB_MOD_IMPLIB_FILE_SUFFIX "")
if(FRAMELESSHELPER_BUILD_STATIC)
if(MSVC)
set(SUB_MOD_FILE_SUFFIX "lib")
set(SUB_MOD_IMPLIB_FILE_SUFFIX "lib")
else()
set(SUB_MOD_FILE_SUFFIX "a")
set(SUB_MOD_IMPLIB_FILE_SUFFIX "a")
endif()
else()
if(WIN32)
set(SUB_MOD_FILE_SUFFIX "dll")
if(MSVC)
set(SUB_MOD_IMPLIB_FILE_SUFFIX "lib")
else()
set(SUB_MOD_IMPLIB_FILE_SUFFIX "dll.a")
endif()
elseif(APPLE)
set(SUB_MOD_FILE_SUFFIX "dylib")
set(SUB_MOD_IMPLIB_FILE_SUFFIX "a")
else()
set(SUB_MOD_FILE_SUFFIX "so")
set(SUB_MOD_IMPLIB_FILE_SUFFIX "a")
endif()
endif()
set(SUB_MOD_FILE_BASENAME "${SUB_MOD_FILE_PREFIX}${SUB_PROJ_NAME}")
if("x${CMAKE_BUILD_TYPE}" STREQUAL "xDebug")
string(APPEND SUB_MOD_FILE_BASENAME "${CMAKE_DEBUG_POSTFIX}")
endif()
set(SUB_MOD_FILE_NAME "${SUB_MOD_FILE_BASENAME}.${SUB_MOD_FILE_SUFFIX}")
set(SUB_MOD_IMPLIB_FILE_NAME "${SUB_MOD_FILE_BASENAME}.${SUB_MOD_IMPLIB_FILE_SUFFIX}")
if(NOT FRAMELESSHELPER_NO_BUNDLE_RESOURCE)
if(QT_VERSION VERSION_GREATER_EQUAL "6.2")
qt_add_resources(${SUB_PROJ_NAME} framelesshelpercore
qt_add_resources(${SUB_MODULE} framelesshelpercore
PREFIX
"/org.wangwenx190.${PROJECT_NAME}"
FILES
@ -230,114 +189,101 @@ if(NOT FRAMELESSHELPER_NO_BUNDLE_RESOURCE)
)
if(__qrc_targets)
foreach(__target ${__qrc_targets})
list(APPEND SUB_MOD_TARGETS ${__target})
if(FRAMELESSHELPER_BUILD_STATIC)
target_sources(${SUB_PROJ_NAME} PRIVATE
target_sources(${SUB_MODULE} PRIVATE
$<TARGET_OBJECTS:${__target}>
)
endif()
endforeach()
endif()
else()
target_sources(${SUB_PROJ_NAME} PRIVATE
target_sources(${SUB_MODULE} PRIVATE
framelesshelpercore.qrc
)
endif()
endif()
if(FRAMELESSHELPER_BUILD_STATIC)
set(__def FRAMELESSHELPER_CORE_STATIC)
target_compile_definitions(${SUB_PROJ_NAME} PUBLIC ${__def})
list(APPEND SUB_MOD_DEFS ${__def})
unset(__def)
target_compile_definitions(${SUB_MODULE} PUBLIC FRAMELESSHELPER_CORE_STATIC)
endif()
if(FRAMELESSHELPER_NO_DEBUG_OUTPUT)
target_compile_definitions(${SUB_PROJ_NAME} PRIVATE
target_compile_definitions(${SUB_MODULE} PRIVATE
FRAMELESSHELPER_CORE_NO_DEBUG_OUTPUT
)
endif()
if(FRAMELESSHELPER_NO_BUNDLE_RESOURCE)
set(__def FRAMELESSHELPER_CORE_NO_BUNDLE_RESOURCE)
target_compile_definitions(${SUB_PROJ_NAME} PUBLIC ${__def})
list(APPEND SUB_MOD_DEFS ${__def})
unset(__def)
target_compile_definitions(${SUB_MODULE} PUBLIC FRAMELESSHELPER_CORE_NO_BUNDLE_RESOURCE)
endif()
if(FRAMELESSHELPER_NO_PRIVATE)
set(__def FRAMELESSHELPER_CORE_NO_PRIVATE)
target_compile_definitions(${SUB_PROJ_NAME} PUBLIC ${__def})
list(APPEND SUB_MOD_DEFS ${__def})
unset(__def)
target_compile_definitions(${SUB_MODULE} PUBLIC FRAMELESSHELPER_CORE_NO_PRIVATE)
endif()
if(DEFINED FRAMELESSHELPER_NAMESPACE)
if("x${FRAMELESSHELPER_NAMESPACE}" STREQUAL "x")
message(FATAL_ERROR "FRAMELESSHELPER_NAMESPACE can't be empty!")
endif()
set(__def FRAMELESSHELPER_NAMESPACE=${FRAMELESSHELPER_NAMESPACE})
target_compile_definitions(${SUB_PROJ_NAME} PUBLIC ${__def})
list(APPEND SUB_MOD_DEFS ${__def})
unset(__def)
target_compile_definitions(${SUB_MODULE} PUBLIC FRAMELESSHELPER_NAMESPACE=${FRAMELESSHELPER_NAMESPACE})
endif()
target_compile_definitions(${SUB_PROJ_NAME} PRIVATE
target_compile_definitions(${SUB_MODULE} PRIVATE
FRAMELESSHELPER_CORE_LIBRARY
)
if(APPLE)
target_link_libraries(${SUB_PROJ_NAME} PRIVATE
target_link_libraries(${SUB_MODULE} PRIVATE
"-framework Foundation"
"-framework Cocoa"
"-framework AppKit"
)
elseif(UNIX)
if(TARGET X11::xcb)
target_link_libraries(${SUB_PROJ_NAME} PRIVATE
target_link_libraries(${SUB_MODULE} PRIVATE
X11::xcb
)
endif()
if(TARGET PkgConfig::GTK3)
target_link_libraries(${SUB_PROJ_NAME} PRIVATE
target_link_libraries(${SUB_MODULE} PRIVATE
PkgConfig::GTK3
)
target_compile_definitions(${SUB_PROJ_NAME} PRIVATE
target_compile_definitions(${SUB_MODULE} PRIVATE
GDK_VERSION_MIN_REQUIRED=GDK_VERSION_3_6
)
endif()
endif()
if(FRAMELESSHELPER_NO_PRIVATE)
target_link_libraries(${SUB_PROJ_NAME} PRIVATE
target_link_libraries(${SUB_MODULE} PRIVATE
Qt${QT_VERSION_MAJOR}::Core
Qt${QT_VERSION_MAJOR}::Gui
)
# Qt X11Extras was first introduced in 5.1 and got removed in 6.0
# But it was again brought back as a private feature of QtGui in 6.2
if(TARGET Qt5::X11Extras)
target_link_libraries(${SUB_PROJ_NAME} PRIVATE
target_link_libraries(${SUB_MODULE} PRIVATE
Qt5::X11Extras
)
endif()
else()
target_link_libraries(${SUB_PROJ_NAME} PRIVATE
target_link_libraries(${SUB_MODULE} PRIVATE
Qt${QT_VERSION_MAJOR}::CorePrivate
Qt${QT_VERSION_MAJOR}::GuiPrivate
)
endif()
target_include_directories(${SUB_PROJ_NAME} PUBLIC
target_include_directories(${SUB_MODULE} PUBLIC
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/${INCLUDE_PREFIX}/../..>"
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/${INCLUDE_PREFIX}>"
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/${INCLUDE_PREFIX}/private>"
"$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>"
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/${SUB_PROJ_PATH}>"
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/${SUB_PROJ_PATH}/private>"
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/${SUB_MODULE_PATH}>"
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/${SUB_MODULE_PATH}/private>"
)
setup_qt_stuff(TARGETS ${SUB_PROJ_NAME})
setup_qt_stuff(TARGETS ${SUB_MODULE})
set(__extra_flags)
if(NOT FRAMELESSHELPER_NO_PERMISSIVE_CHECKS)
list(APPEND __extra_flags PERMISSIVE)
@ -360,35 +306,19 @@ endif()
if(FRAMELESSHELPER_FORCE_LTO)
list(APPEND __extra_flags FORCE_LTO)
endif()
setup_compile_params(TARGETS ${SUB_PROJ_NAME} ${__extra_flags})
setup_compile_params(TARGETS ${SUB_MODULE} ${__extra_flags})
if(NOT FRAMELESSHELPER_NO_INSTALL)
set(__cmake_dir "${CMAKE_CURRENT_BINARY_DIR}/cmake")
set(__config_file "${__cmake_dir}/${SUB_PROJ_NAME}Config.cmake")
configure_file(../../FramelessHelperModuleConfig.cmake.in ${__config_file} @ONLY)
set(__targets_file "${__cmake_dir}/${SUB_PROJ_NAME}Targets.cmake")
configure_file(../../FramelessHelperModuleTargets.cmake.in ${__targets_file} @ONLY)
install(
FILES "${__config_file}" "${__targets_file}"
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${SUB_PROJ_NAME}"
)
set(__inc_dir "${CMAKE_INSTALL_INCLUDEDIR}/${SUB_PROJ_PATH}")
install(
FILES ${PUBLIC_HEADERS} ${PUBLIC_HEADERS_ALIAS}
DESTINATION "${__inc_dir}"
)
install(
FILES ${PRIVATE_HEADERS}
DESTINATION "${__inc_dir}/private"
)
install(
TARGETS ${SUB_MOD_TARGETS}
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
INCLUDES DESTINATION "${__inc_dir}"
setup_package_export(
TARGET ${SUB_MODULE}
NAMESPACE ${PROJECT_NAME}
PACKAGE_NAME ${PROJECT_NAME}
INCLUDE_DIR ${SUB_MODULE}
PUBLIC_HEADERS ${PUBLIC_HEADERS}
ALIAS_HEADERS ${PUBLIC_HEADERS_ALIAS}
PRIVATE_HEADERS ${PRIVATE_HEADERS}
)
endif()
if(NOT FRAMELESSHELPER_NO_SUMMARY)
dump_target_info(TARGETS ${SUB_PROJ_NAME})
dump_target_info(TARGETS ${SUB_MODULE})
endif()

View File

@ -31,11 +31,11 @@ endif()
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS QuickTemplates2 QuickControls2)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS QuickTemplates2 QuickControls2)
set(SUB_MOD_NAME Quick)
set(SUB_PROJ_NAME ${PROJECT_NAME}${SUB_MOD_NAME})
set(SUB_PROJ_PATH ${PROJECT_NAME}/${SUB_MOD_NAME})
set(SUB_MODULE Quick)
set(SUB_MODULE_FULL_NAME ${PROJECT_NAME}${SUB_MODULE})
set(SUB_MODULE_PATH ${PROJECT_NAME}/${SUB_MODULE})
set(INCLUDE_PREFIX ../../include/${SUB_PROJ_PATH})
set(INCLUDE_PREFIX ../../include/${SUB_MODULE_PATH})
set(PUBLIC_HEADERS
${INCLUDE_PREFIX}/framelesshelperquick_global.h
@ -88,18 +88,20 @@ set(SOURCES
)
if(WIN32 AND NOT FRAMELESSHELPER_BUILD_STATIC)
set(__rc_path "${CMAKE_CURRENT_BINARY_DIR}/${SUB_PROJ_NAME}.rc")
set(__rc_path "${CMAKE_CURRENT_BINARY_DIR}/${SUB_MODULE_FULL_NAME}.rc")
if(NOT EXISTS "${__rc_path}")
generate_win32_rc_file(
PATH "${__rc_path}"
VERSION "${PROJECT_VERSION}"
COMPANY "wangwenx190"
DESCRIPTION "${PROJECT_NAME} ${SUB_MOD_NAME} Module"
DESCRIPTION "${PROJECT_NAME} ${SUB_MODULE} Module"
COPYRIGHT "MIT License"
ORIGINAL_FILENAME "${PROJECT_NAME}${SUB_MOD_NAME}.dll"
ORIGINAL_FILENAME "${PROJECT_NAME}${SUB_MODULE}.dll"
PRODUCT "${PROJECT_NAME}"
COMMENTS "Built from commit ${PROJECT_VERSION_COMMIT} on ${PROJECT_COMPILE_DATETIME} (UTC)."
LIBRARY
)
endif()
list(APPEND SOURCES "${__rc_path}")
endif()
@ -110,58 +112,17 @@ if(FRAMELESSHELPER_BUILD_STATIC)
else()
set(SUB_MOD_LIB_TYPE "SHARED")
endif()
add_library(${SUB_PROJ_NAME} ${SUB_MOD_LIB_TYPE} ${ALL_SOURCES})
add_library(${PROJECT_NAME}::${SUB_PROJ_NAME} ALIAS ${SUB_PROJ_NAME})
add_library(${PROJECT_NAME}::${SUB_MOD_NAME} ALIAS ${SUB_PROJ_NAME})
add_library(${SUB_MODULE} ${SUB_MOD_LIB_TYPE} ${ALL_SOURCES})
add_library(${SUB_MODULE_FULL_NAME} ALIAS ${SUB_MODULE})
add_library(${PROJECT_NAME}::${SUB_MODULE} ALIAS ${SUB_MODULE})
add_library(${PROJECT_NAME}::${SUB_MODULE_FULL_NAME} ALIAS ${SUB_MODULE})
set_target_properties(${SUB_PROJ_NAME} PROPERTIES
set_target_properties(${SUB_MODULE} PROPERTIES
VERSION "${PROJECT_VERSION}"
SOVERSION "${PROJECT_VERSION_MAJOR}"
OUTPUT_NAME "${SUB_MODULE_FULL_NAME}"
)
if(WIN32 AND NOT FRAMELESSHELPER_BUILD_STATIC)
set(SUB_MOD_LIB_DIR "${CMAKE_INSTALL_BINDIR}")
else()
set(SUB_MOD_LIB_DIR "${CMAKE_INSTALL_LIBDIR}")
endif()
set(SUB_MOD_FILE_PREFIX "")
if(NOT MSVC)
set(SUB_MOD_FILE_PREFIX "lib")
endif()
set(SUB_MOD_FILE_SUFFIX "")
set(SUB_MOD_IMPLIB_FILE_SUFFIX "")
if(FRAMELESSHELPER_BUILD_STATIC)
if(MSVC)
set(SUB_MOD_FILE_SUFFIX "lib")
set(SUB_MOD_IMPLIB_FILE_SUFFIX "lib")
else()
set(SUB_MOD_FILE_SUFFIX "a")
set(SUB_MOD_IMPLIB_FILE_SUFFIX "a")
endif()
else()
if(WIN32)
set(SUB_MOD_FILE_SUFFIX "dll")
if(MSVC)
set(SUB_MOD_IMPLIB_FILE_SUFFIX "lib")
else()
set(SUB_MOD_IMPLIB_FILE_SUFFIX "dll.a")
endif()
elseif(APPLE)
set(SUB_MOD_FILE_SUFFIX "dylib")
set(SUB_MOD_IMPLIB_FILE_SUFFIX "a")
else()
set(SUB_MOD_FILE_SUFFIX "so")
set(SUB_MOD_IMPLIB_FILE_SUFFIX "a")
endif()
endif()
set(SUB_MOD_FILE_BASENAME "${SUB_MOD_FILE_PREFIX}${SUB_PROJ_NAME}")
if("x${CMAKE_BUILD_TYPE}" STREQUAL "xDebug")
string(APPEND SUB_MOD_FILE_BASENAME "${CMAKE_DEBUG_POSTFIX}")
endif()
set(SUB_MOD_FILE_NAME "${SUB_MOD_FILE_BASENAME}.${SUB_MOD_FILE_SUFFIX}")
set(SUB_MOD_IMPLIB_FILE_NAME "${SUB_MOD_FILE_BASENAME}.${SUB_MOD_IMPLIB_FILE_SUFFIX}")
set(__import_base_dir "${PROJECT_BINARY_DIR}/imports")
if(DEFINED FRAMELESSHELPER_IMPORT_DIR)
set(__import_base_dir "${FRAMELESSHELPER_IMPORT_DIR}")
@ -173,7 +134,7 @@ endif()
# calculate the generated files, which will also break Ninja Multi-Config
# builds.
if(QT_VERSION VERSION_GREATER_EQUAL "6.3")
qt_add_qml_module(${SUB_PROJ_NAME}
qt_add_qml_module(${SUB_MODULE}
URI "org.wangwenx190.${PROJECT_NAME}"
VERSION "1.0"
OUTPUT_DIRECTORY "${__import_base_dir}/org/wangwenx190/${PROJECT_NAME}"
@ -193,14 +154,14 @@ if(QT_VERSION VERSION_GREATER_EQUAL "6.3")
# and thus it causes linker errors for our users,
# so we need this hack here.
if(FRAMELESSHELPER_BUILD_STATIC)
target_sources(${SUB_PROJ_NAME} PRIVATE
target_sources(${SUB_MODULE} PRIVATE
$<TARGET_OBJECTS:${__target}>
)
endif()
endforeach()
endif()
if(NOT FRAMELESSHELPER_NO_INSTALL)
qt_query_qml_module(${SUB_PROJ_NAME}
qt_query_qml_module(${SUB_MODULE}
URI module_uri
VERSION module_version
PLUGIN_TARGET module_plugin_target
@ -252,72 +213,60 @@ if(QT_VERSION VERSION_GREATER_EQUAL "6.3")
endif()
if(FRAMELESSHELPER_BUILD_STATIC)
set(__def FRAMELESSHELPER_QUICK_STATIC)
target_compile_definitions(${SUB_PROJ_NAME} PUBLIC ${__def})
list(APPEND SUB_MOD_DEFS ${__def})
unset(__def)
target_compile_definitions(${SUB_MODULE} PUBLIC FRAMELESSHELPER_QUICK_STATIC)
endif()
if(FRAMELESSHELPER_NO_DEBUG_OUTPUT)
target_compile_definitions(${SUB_PROJ_NAME} PRIVATE
target_compile_definitions(${SUB_MODULE} PRIVATE
FRAMELESSHELPER_QUICK_NO_DEBUG_OUTPUT
)
endif()
if(FRAMELESSHELPER_NO_BUNDLE_RESOURCE)
set(__def FRAMELESSHELPER_QUICK_NO_BUNDLE_RESOURCE)
target_compile_definitions(${SUB_PROJ_NAME} PUBLIC ${__def})
list(APPEND SUB_MOD_DEFS ${__def})
unset(__def)
target_compile_definitions(${SUB_MODULE} PUBLIC FRAMELESSHELPER_QUICK_NO_BUNDLE_RESOURCE)
endif()
if(FRAMELESSHELPER_NO_PRIVATE)
set(__def FRAMELESSHELPER_QUICK_NO_PRIVATE)
target_compile_definitions(${SUB_PROJ_NAME} PUBLIC ${__def})
list(APPEND SUB_MOD_DEFS ${__def})
unset(__def)
target_compile_definitions(${SUB_MODULE} PUBLIC FRAMELESSHELPER_QUICK_NO_PRIVATE)
endif()
if(DEFINED FRAMELESSHELPER_NAMESPACE)
if("x${FRAMELESSHELPER_NAMESPACE}" STREQUAL "x")
message(FATAL_ERROR "FRAMELESSHELPER_NAMESPACE can't be empty!")
endif()
set(__def FRAMELESSHELPER_NAMESPACE=${FRAMELESSHELPER_NAMESPACE})
target_compile_definitions(${SUB_PROJ_NAME} PUBLIC ${__def})
list(APPEND SUB_MOD_DEFS ${__def})
unset(__def)
target_compile_definitions(${SUB_MODULE} PUBLIC FRAMELESSHELPER_NAMESPACE=${FRAMELESSHELPER_NAMESPACE})
endif()
target_compile_definitions(${SUB_PROJ_NAME} PRIVATE
target_compile_definitions(${SUB_MODULE} PRIVATE
FRAMELESSHELPER_QUICK_LIBRARY
)
if(FRAMELESSHELPER_NO_PRIVATE)
target_link_libraries(${SUB_PROJ_NAME} PRIVATE
target_link_libraries(${SUB_MODULE} PRIVATE
Qt${QT_VERSION_MAJOR}::Quick
)
else()
target_link_libraries(${SUB_PROJ_NAME} PRIVATE
target_link_libraries(${SUB_MODULE} PRIVATE
Qt${QT_VERSION_MAJOR}::QuickPrivate
Qt${QT_VERSION_MAJOR}::QuickTemplates2Private
Qt${QT_VERSION_MAJOR}::QuickControls2Private
)
endif()
target_link_libraries(${SUB_PROJ_NAME} PUBLIC
target_link_libraries(${SUB_MODULE} PUBLIC
${PROJECT_NAME}::Core
)
target_include_directories(${SUB_PROJ_NAME} PUBLIC
target_include_directories(${SUB_MODULE} PUBLIC
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/${INCLUDE_PREFIX}/../..>"
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/${INCLUDE_PREFIX}>"
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/${INCLUDE_PREFIX}/private>"
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/${SUB_PROJ_PATH}>"
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/${SUB_PROJ_PATH}/private>"
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/${SUB_MODULE_PATH}>"
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/${SUB_MODULE_PATH}/private>"
)
setup_qt_stuff(TARGETS ${SUB_PROJ_NAME} ALLOW_KEYWORD)
setup_qt_stuff(TARGETS ${SUB_MODULE} ALLOW_KEYWORD)
set(__extra_flags)
if(NOT FRAMELESSHELPER_NO_PERMISSIVE_CHECKS)
list(APPEND __extra_flags PERMISSIVE)
@ -340,35 +289,19 @@ endif()
if(FRAMELESSHELPER_FORCE_LTO)
list(APPEND __extra_flags FORCE_LTO)
endif()
setup_compile_params(TARGETS ${SUB_PROJ_NAME} ${__extra_flags})
setup_compile_params(TARGETS ${SUB_MODULE} ${__extra_flags})
if(NOT FRAMELESSHELPER_NO_INSTALL)
set(__cmake_dir "${CMAKE_CURRENT_BINARY_DIR}/cmake")
set(__config_file "${__cmake_dir}/${SUB_PROJ_NAME}Config.cmake")
configure_file(../../FramelessHelperModuleConfig.cmake.in ${__config_file} @ONLY)
set(__targets_file "${__cmake_dir}/${SUB_PROJ_NAME}Targets.cmake")
configure_file(../../FramelessHelperModuleTargets.cmake.in ${__targets_file} @ONLY)
install(
FILES "${__config_file}" "${__targets_file}"
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${SUB_PROJ_NAME}"
)
set(__inc_dir "${CMAKE_INSTALL_INCLUDEDIR}/${SUB_PROJ_PATH}")
install(
FILES ${PUBLIC_HEADERS} ${PUBLIC_HEADERS_ALIAS}
DESTINATION "${__inc_dir}"
)
install(
FILES ${PRIVATE_HEADERS}
DESTINATION "${__inc_dir}/private"
)
install(
TARGETS ${SUB_PROJ_NAME}
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
INCLUDES DESTINATION "${__inc_dir}"
setup_package_export(
TARGET ${SUB_MODULE}
NAMESPACE ${PROJECT_NAME}
PACKAGE_NAME ${PROJECT_NAME}
INCLUDE_DIR ${SUB_MODULE}
PUBLIC_HEADERS ${PUBLIC_HEADERS}
ALIAS_HEADERS ${PUBLIC_HEADERS_ALIAS}
PRIVATE_HEADERS ${PRIVATE_HEADERS}
)
endif()
if(NOT FRAMELESSHELPER_NO_SUMMARY)
dump_target_info(TARGETS ${SUB_PROJ_NAME})
dump_target_info(TARGETS ${SUB_MODULE})
endif()

View File

@ -28,11 +28,11 @@ if(FRAMELESSHELPER_ENABLE_UNIVERSAL_BUILD)
set(CMAKE_OSX_ARCHITECTURES "arm64;x86_64" CACHE STRING "" FORCE)
endif()
set(SUB_MOD_NAME Widgets)
set(SUB_PROJ_NAME ${PROJECT_NAME}${SUB_MOD_NAME})
set(SUB_PROJ_PATH ${PROJECT_NAME}/${SUB_MOD_NAME})
set(SUB_MODULE Widgets)
set(SUB_MODULE_FULL_NAME ${PROJECT_NAME}${SUB_MODULE})
set(SUB_MODULE_PATH ${PROJECT_NAME}/${SUB_MODULE})
set(INCLUDE_PREFIX ../../include/${SUB_PROJ_PATH})
set(INCLUDE_PREFIX ../../include/${SUB_MODULE_PATH})
set(PUBLIC_HEADERS
${INCLUDE_PREFIX}/framelesshelperwidgets_global.h
@ -76,18 +76,20 @@ set(SOURCES
)
if(WIN32 AND NOT FRAMELESSHELPER_BUILD_STATIC)
set(__rc_path "${CMAKE_CURRENT_BINARY_DIR}/${SUB_PROJ_NAME}.rc")
set(__rc_path "${CMAKE_CURRENT_BINARY_DIR}/${SUB_MODULE_FULL_NAME}.rc")
if(NOT EXISTS "${__rc_path}")
generate_win32_rc_file(
PATH "${__rc_path}"
VERSION "${PROJECT_VERSION}"
COMPANY "wangwenx190"
DESCRIPTION "${PROJECT_NAME} ${SUB_MOD_NAME} Module"
DESCRIPTION "${PROJECT_NAME} ${SUB_MODULE} Module"
COPYRIGHT "MIT License"
ORIGINAL_FILENAME "${PROJECT_NAME}${SUB_MOD_NAME}.dll"
ORIGINAL_FILENAME "${PROJECT_NAME}${SUB_MODULE}.dll"
PRODUCT "${PROJECT_NAME}"
COMMENTS "Built from commit ${PROJECT_VERSION_COMMIT} on ${PROJECT_COMPILE_DATETIME} (UTC)."
LIBRARY
)
endif()
list(APPEND SOURCES "${__rc_path}")
endif()
@ -98,117 +100,64 @@ if(FRAMELESSHELPER_BUILD_STATIC)
else()
set(SUB_MOD_LIB_TYPE "SHARED")
endif()
add_library(${SUB_PROJ_NAME} ${SUB_MOD_LIB_TYPE} ${ALL_SOURCES})
add_library(${PROJECT_NAME}::${SUB_PROJ_NAME} ALIAS ${SUB_PROJ_NAME})
add_library(${PROJECT_NAME}::${SUB_MOD_NAME} ALIAS ${SUB_PROJ_NAME})
add_library(${SUB_MODULE} ${SUB_MOD_LIB_TYPE} ${ALL_SOURCES})
add_library(${SUB_MODULE_FULL_NAME} ALIAS ${SUB_MODULE})
add_library(${PROJECT_NAME}::${SUB_MODULE} ALIAS ${SUB_MODULE})
add_library(${PROJECT_NAME}::${SUB_MODULE_FULL_NAME} ALIAS ${SUB_MODULE})
set_target_properties(${SUB_PROJ_NAME} PROPERTIES
set_target_properties(${SUB_MODULE} PROPERTIES
VERSION "${PROJECT_VERSION}"
SOVERSION "${PROJECT_VERSION_MAJOR}"
OUTPUT_NAME "${SUB_MODULE_FULL_NAME}"
)
if(WIN32 AND NOT FRAMELESSHELPER_BUILD_STATIC)
set(SUB_MOD_LIB_DIR "${CMAKE_INSTALL_BINDIR}")
else()
set(SUB_MOD_LIB_DIR "${CMAKE_INSTALL_LIBDIR}")
endif()
set(SUB_MOD_FILE_PREFIX "")
if(NOT MSVC)
set(SUB_MOD_FILE_PREFIX "lib")
endif()
set(SUB_MOD_FILE_SUFFIX "")
set(SUB_MOD_IMPLIB_FILE_SUFFIX "")
if(FRAMELESSHELPER_BUILD_STATIC)
if(MSVC)
set(SUB_MOD_FILE_SUFFIX "lib")
set(SUB_MOD_IMPLIB_FILE_SUFFIX "lib")
else()
set(SUB_MOD_FILE_SUFFIX "a")
set(SUB_MOD_IMPLIB_FILE_SUFFIX "a")
endif()
else()
if(WIN32)
set(SUB_MOD_FILE_SUFFIX "dll")
if(MSVC)
set(SUB_MOD_IMPLIB_FILE_SUFFIX "lib")
else()
set(SUB_MOD_IMPLIB_FILE_SUFFIX "dll.a")
endif()
elseif(APPLE)
set(SUB_MOD_FILE_SUFFIX "dylib")
set(SUB_MOD_IMPLIB_FILE_SUFFIX "a")
else()
set(SUB_MOD_FILE_SUFFIX "so")
set(SUB_MOD_IMPLIB_FILE_SUFFIX "a")
endif()
endif()
set(SUB_MOD_FILE_BASENAME "${SUB_MOD_FILE_PREFIX}${SUB_PROJ_NAME}")
if("x${CMAKE_BUILD_TYPE}" STREQUAL "xDebug")
string(APPEND SUB_MOD_FILE_BASENAME "${CMAKE_DEBUG_POSTFIX}")
endif()
set(SUB_MOD_FILE_NAME "${SUB_MOD_FILE_BASENAME}.${SUB_MOD_FILE_SUFFIX}")
set(SUB_MOD_IMPLIB_FILE_NAME "${SUB_MOD_FILE_BASENAME}.${SUB_MOD_IMPLIB_FILE_SUFFIX}")
if(FRAMELESSHELPER_BUILD_STATIC)
set(__def FRAMELESSHELPER_WIDGETS_STATIC)
target_compile_definitions(${SUB_PROJ_NAME} PUBLIC ${__def})
list(APPEND SUB_MOD_DEFS ${__def})
unset(__def)
target_compile_definitions(${SUB_MODULE} PUBLIC FRAMELESSHELPER_WIDGETS_STATIC)
endif()
if(FRAMELESSHELPER_NO_DEBUG_OUTPUT)
target_compile_definitions(${SUB_PROJ_NAME} PRIVATE
target_compile_definitions(${SUB_MODULE} PRIVATE
FRAMELESSHELPER_WIDGETS_NO_DEBUG_OUTPUT
)
endif()
if(FRAMELESSHELPER_NO_BUNDLE_RESOURCE)
set(__def FRAMELESSHELPER_WIDGETS_NO_BUNDLE_RESOURCE)
target_compile_definitions(${SUB_PROJ_NAME} PUBLIC ${__def})
list(APPEND SUB_MOD_DEFS ${__def})
unset(__def)
target_compile_definitions(${SUB_MODULE} PUBLIC FRAMELESSHELPER_WIDGETS_NO_BUNDLE_RESOURCE)
endif()
if(FRAMELESSHELPER_NO_PRIVATE)
set(__def FRAMELESSHELPER_WIDGETS_NO_PRIVATE)
target_compile_definitions(${SUB_PROJ_NAME} PUBLIC ${__def})
list(APPEND SUB_MOD_DEFS ${__def})
unset(__def)
target_compile_definitions(${SUB_MODULE} PUBLIC FRAMELESSHELPER_WIDGETS_NO_PRIVATE)
endif()
if(DEFINED FRAMELESSHELPER_NAMESPACE)
if("x${FRAMELESSHELPER_NAMESPACE}" STREQUAL "x")
message(FATAL_ERROR "FRAMELESSHELPER_NAMESPACE can't be empty!")
endif()
set(__def FRAMELESSHELPER_NAMESPACE=${FRAMELESSHELPER_NAMESPACE})
target_compile_definitions(${SUB_PROJ_NAME} PUBLIC ${__def})
list(APPEND SUB_MOD_DEFS ${__def})
unset(__def)
target_compile_definitions(${SUB_MODULE} PUBLIC FRAMELESSHELPER_NAMESPACE=${FRAMELESSHELPER_NAMESPACE})
endif()
target_compile_definitions(${SUB_PROJ_NAME} PRIVATE
target_compile_definitions(${SUB_MODULE} PRIVATE
FRAMELESSHELPER_WIDGETS_LIBRARY
)
target_link_libraries(${SUB_PROJ_NAME} PRIVATE
target_link_libraries(${SUB_MODULE} PRIVATE
Qt${QT_VERSION_MAJOR}::Widgets
)
target_link_libraries(${SUB_PROJ_NAME} PUBLIC
target_link_libraries(${SUB_MODULE} PUBLIC
${PROJECT_NAME}::Core
)
target_include_directories(${SUB_PROJ_NAME} PUBLIC
target_include_directories(${SUB_MODULE} PUBLIC
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/${INCLUDE_PREFIX}/../..>"
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/${INCLUDE_PREFIX}>"
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/${INCLUDE_PREFIX}/private>"
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/${SUB_PROJ_PATH}>"
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/${SUB_PROJ_PATH}/private>"
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/${SUB_MODULE_PATH}>"
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/${SUB_MODULE_PATH}/private>"
)
setup_qt_stuff(TARGETS ${SUB_PROJ_NAME})
setup_qt_stuff(TARGETS ${SUB_MODULE})
set(__extra_flags)
if(NOT FRAMELESSHELPER_NO_PERMISSIVE_CHECKS)
list(APPEND __extra_flags PERMISSIVE)
@ -231,35 +180,19 @@ endif()
if(FRAMELESSHELPER_FORCE_LTO)
list(APPEND __extra_flags FORCE_LTO)
endif()
setup_compile_params(TARGETS ${SUB_PROJ_NAME} ${__extra_flags})
setup_compile_params(TARGETS ${SUB_MODULE} ${__extra_flags})
if(NOT FRAMELESSHELPER_NO_INSTALL)
set(__cmake_dir "${CMAKE_CURRENT_BINARY_DIR}/cmake")
set(__config_file "${__cmake_dir}/${SUB_PROJ_NAME}Config.cmake")
configure_file(../../FramelessHelperModuleConfig.cmake.in ${__config_file} @ONLY)
set(__targets_file "${__cmake_dir}/${SUB_PROJ_NAME}Targets.cmake")
configure_file(../../FramelessHelperModuleTargets.cmake.in ${__targets_file} @ONLY)
install(
FILES "${__config_file}" "${__targets_file}"
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${SUB_PROJ_NAME}"
)
set(__inc_dir "${CMAKE_INSTALL_INCLUDEDIR}/${SUB_PROJ_PATH}")
install(
FILES ${PUBLIC_HEADERS} ${PUBLIC_HEADERS_ALIAS}
DESTINATION "${__inc_dir}"
)
install(
FILES ${PRIVATE_HEADERS}
DESTINATION "${__inc_dir}/private"
)
install(
TARGETS ${SUB_PROJ_NAME}
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
INCLUDES DESTINATION "${__inc_dir}"
setup_package_export(
TARGET ${SUB_MODULE}
NAMESPACE ${PROJECT_NAME}
PACKAGE_NAME ${PROJECT_NAME}
INCLUDE_DIR ${SUB_MODULE}
PUBLIC_HEADERS ${PUBLIC_HEADERS}
ALIAS_HEADERS ${PUBLIC_HEADERS_ALIAS}
PRIVATE_HEADERS ${PRIVATE_HEADERS}
)
endif()
if(NOT FRAMELESSHELPER_NO_SUMMARY)
dump_target_info(TARGETS ${SUB_PROJ_NAME})
dump_target_info(TARGETS ${SUB_MODULE})
endif()