parent
6ccb25db0a
commit
2a49e9fcaf
|
@ -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()
|
||||
|
|
|
@ -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@"
|
||||
)
|
|
@ -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()
|
|
@ -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()
|
|
@ -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
2
cmake
|
@ -1 +1 @@
|
|||
Subproject commit 35a5dbbb0ea3fe1431c1dbf75d4bc329c86d61e5
|
||||
Subproject commit f41e3f888db144b5d30a3bd8d227905a391531f1
|
|
@ -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>
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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()
|
||||
|
|
Loading…
Reference in New Issue