simplify cmake scripts
Signed-off-by: Yuhang Zhao <2546789017@qq.com>
This commit is contained in:
parent
5cd386a419
commit
6063a962eb
|
@ -0,0 +1,3 @@
|
||||||
|
[submodule "cmake"]
|
||||||
|
path = cmake
|
||||||
|
url = https://github.com/wangwenx190/cmake-utils.git
|
128
CMakeLists.txt
128
CMakeLists.txt
|
@ -28,7 +28,6 @@ project(FramelessHelper
|
||||||
VERSION 2.3.5.0
|
VERSION 2.3.5.0
|
||||||
DESCRIPTION "Cross-platform window customization framework for Qt Widgets and Qt Quick."
|
DESCRIPTION "Cross-platform window customization framework for Qt Widgets and Qt Quick."
|
||||||
HOMEPAGE_URL "https://github.com/wangwenx190/framelesshelper/"
|
HOMEPAGE_URL "https://github.com/wangwenx190/framelesshelper/"
|
||||||
LANGUAGES CXX
|
|
||||||
)
|
)
|
||||||
|
|
||||||
option(FRAMELESSHELPER_BUILD_STATIC "Build FramelessHelper as a static library." OFF)
|
option(FRAMELESSHELPER_BUILD_STATIC "Build FramelessHelper as a static library." OFF)
|
||||||
|
@ -51,100 +50,43 @@ if(FRAMELESSHELPER_ENABLE_VCLTL AND NOT MSVC)
|
||||||
message(WARNING "VC-LTL is only available for the MSVC toolchain.")
|
message(WARNING "VC-LTL is only available for the MSVC toolchain.")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
include(GNUInstallDirs)
|
include(cmake/utils.cmake)
|
||||||
include(CMakePackageConfigHelpers)
|
|
||||||
|
|
||||||
if(NOT DEFINED CMAKE_BUILD_TYPE)
|
set(__extra_flags)
|
||||||
set(CMAKE_BUILD_TYPE Release)
|
if(NOT FRAMELESSHELPER_BUILD_STATIC)
|
||||||
|
set(__extra_flags ENABLE_LTO)
|
||||||
endif()
|
endif()
|
||||||
|
setup_project(
|
||||||
if(NOT DEFINED CMAKE_INTERPROCEDURAL_OPTIMIZATION_RELEASE)
|
QT_PROJECT
|
||||||
# MinGW has many bugs when LTO is enabled, and they are all very
|
QML_IMPORT_DIR "${PROJECT_BINARY_DIR}/qml"
|
||||||
# hard to workaround, so just don't enable LTO at all for MinGW.
|
LANGUAGES CXX RC
|
||||||
if(NOT (MINGW OR FRAMELESSHELPER_BUILD_STATIC))
|
${__extra_flags}
|
||||||
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_RELEASE ON)
|
)
|
||||||
endif()
|
unset(__extra_flags)
|
||||||
endif()
|
|
||||||
|
|
||||||
if(NOT DEFINED CMAKE_DEBUG_POSTFIX)
|
|
||||||
if(WIN32)
|
|
||||||
set(CMAKE_DEBUG_POSTFIX d)
|
|
||||||
else()
|
|
||||||
set(CMAKE_DEBUG_POSTFIX _debug)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(NOT DEFINED CMAKE_RUNTIME_OUTPUT_DIRECTORY)
|
|
||||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(NOT DEFINED CMAKE_LIBRARY_OUTPUT_DIRECTORY)
|
|
||||||
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(NOT DEFINED CMAKE_ARCHIVE_OUTPUT_DIRECTORY)
|
|
||||||
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
|
||||||
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
|
|
||||||
set(CMAKE_VISIBILITY_INLINES_HIDDEN ON)
|
|
||||||
|
|
||||||
set(CMAKE_CXX_STANDARD 17)
|
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
||||||
set(CMAKE_CXX_EXTENSIONS OFF)
|
|
||||||
|
|
||||||
set(CMAKE_AUTOUIC ON)
|
|
||||||
set(CMAKE_AUTOMOC ON)
|
|
||||||
set(CMAKE_AUTORCC ON)
|
|
||||||
|
|
||||||
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
|
||||||
|
|
||||||
set(PROJECT_VERSION_COMMIT "UNKNOWN")
|
set(PROJECT_VERSION_COMMIT "UNKNOWN")
|
||||||
# Get a git hash value. We do not want to use git command here
|
get_commit_hash(RESULT PROJECT_VERSION_COMMIT)
|
||||||
# because we don't want to make git a build-time dependency.
|
|
||||||
if(EXISTS "${PROJECT_SOURCE_DIR}/.git/HEAD")
|
|
||||||
file(READ "${PROJECT_SOURCE_DIR}/.git/HEAD" PROJECT_VERSION_COMMIT)
|
|
||||||
string(STRIP "${PROJECT_VERSION_COMMIT}" PROJECT_VERSION_COMMIT)
|
|
||||||
if(PROJECT_VERSION_COMMIT MATCHES "^ref: (.*)")
|
|
||||||
set(HEAD "${CMAKE_MATCH_1}")
|
|
||||||
if(EXISTS "${PROJECT_SOURCE_DIR}/.git/${HEAD}")
|
|
||||||
file(READ "${PROJECT_SOURCE_DIR}/.git/${HEAD}" PROJECT_VERSION_COMMIT)
|
|
||||||
string(STRIP "${PROJECT_VERSION_COMMIT}" PROJECT_VERSION_COMMIT)
|
|
||||||
else()
|
|
||||||
file(READ "${PROJECT_SOURCE_DIR}/.git/packed-refs" PACKED_REFS)
|
|
||||||
string(REGEX REPLACE ".*\n([0-9a-f]+) ${HEAD}\n.*" "\\1" PROJECT_VERSION_COMMIT "\n${PACKED_REFS}")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(PROJECT_COMPILE_DATETIME "UNKNOWN")
|
set(PROJECT_COMPILE_DATETIME "UNKNOWN")
|
||||||
string(TIMESTAMP PROJECT_COMPILE_DATETIME UTC)
|
string(TIMESTAMP PROJECT_COMPILE_DATETIME UTC)
|
||||||
|
|
||||||
if(MSVC)
|
if(FRAMELESSHELPER_ENABLE_VCLTL AND MSVC)
|
||||||
string(REGEX REPLACE "[-|/]GR-? " " " CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
|
include(cmake/VC-LTL.cmake)
|
||||||
string(REGEX REPLACE "[-|/]EHs-?c-? " " " CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
|
if("x${SupportLTL}" STREQUAL "xtrue")
|
||||||
string(REGEX REPLACE "[-|/]W[0|1|2|3|4|all] " " " CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
|
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>" CACHE STRING "" FORCE)
|
||||||
string(APPEND CMAKE_CXX_FLAGS " /GR /EHsc /W4 ")
|
|
||||||
set(CMAKE_RC_FLAGS "/c65001 /DWIN32 /nologo")
|
|
||||||
if(MSVC_VERSION GREATER_EQUAL 1920) # Visual Studio 2019 version 16.0
|
|
||||||
string(REGEX REPLACE "[-|/]Ob[0|1|2|3] " " " CMAKE_CXX_FLAGS_RELEASE ${CMAKE_CXX_FLAGS_RELEASE})
|
|
||||||
string(APPEND CMAKE_CXX_FLAGS_RELEASE " /Ob3 ")
|
|
||||||
endif()
|
|
||||||
if(FRAMELESSHELPER_ENABLE_VCLTL)
|
|
||||||
include(src/core/VC-LTL.cmake)
|
|
||||||
if("x${SupportLTL}" STREQUAL "xtrue")
|
|
||||||
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>" CACHE STRING "" FORCE)
|
|
||||||
endif()
|
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(NOT DEFINED QML_IMPORT_PATH)
|
set(__extra_flags)
|
||||||
set(QML_IMPORT_PATH)
|
if(FRAMELESSHELPER_NO_INSTALL)
|
||||||
|
set(__extra_flags NO_INSTALL)
|
||||||
endif()
|
endif()
|
||||||
list(APPEND QML_IMPORT_PATH "${PROJECT_BINARY_DIR}/qml")
|
prepare_package_export(
|
||||||
list(REMOVE_DUPLICATES QML_IMPORT_PATH)
|
PACKAGE_NAME ${PROJECT_NAME}
|
||||||
set(QML_IMPORT_PATH ${QML_IMPORT_PATH} CACHE STRING "Qt Creator extra QML import paths" FORCE)
|
PACKAGE_VERSION ${PROJECT_VERSION}
|
||||||
|
${__extra_flags}
|
||||||
|
)
|
||||||
|
unset(__extra_flags)
|
||||||
|
|
||||||
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core Gui)
|
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core Gui)
|
||||||
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core Gui)
|
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core Gui)
|
||||||
|
@ -152,26 +94,6 @@ find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core Gui)
|
||||||
find_package(QT NAMES Qt6 Qt5 QUIET COMPONENTS Widgets Quick)
|
find_package(QT NAMES Qt6 Qt5 QUIET COMPONENTS Widgets Quick)
|
||||||
find_package(Qt${QT_VERSION_MAJOR} QUIET COMPONENTS Widgets Quick)
|
find_package(Qt${QT_VERSION_MAJOR} QUIET COMPONENTS Widgets Quick)
|
||||||
|
|
||||||
write_basic_package_version_file(
|
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
|
|
||||||
VERSION ${PROJECT_VERSION}
|
|
||||||
COMPATIBILITY AnyNewerVersion
|
|
||||||
)
|
|
||||||
|
|
||||||
configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}Config.cmake.in
|
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
|
|
||||||
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
|
|
||||||
NO_CHECK_REQUIRED_COMPONENTS_MACRO
|
|
||||||
)
|
|
||||||
|
|
||||||
if(NOT FRAMELESSHELPER_NO_INSTALL)
|
|
||||||
install(FILES
|
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
|
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
|
|
||||||
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(TARGET Qt${QT_VERSION_MAJOR}::Core AND TARGET Qt${QT_VERSION_MAJOR}::Gui)
|
if(TARGET Qt${QT_VERSION_MAJOR}::Core AND TARGET Qt${QT_VERSION_MAJOR}::Gui)
|
||||||
add_subdirectory(src)
|
add_subdirectory(src)
|
||||||
endif()
|
endif()
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit d73d3eb267ab2b853d6a60d65572a493858267db
|
|
@ -47,9 +47,18 @@ target_link_libraries(Dialog PRIVATE
|
||||||
FramelessHelper::Widgets
|
FramelessHelper::Widgets
|
||||||
)
|
)
|
||||||
|
|
||||||
include(../../src/core/cmakehelper.cmake)
|
include(../../cmake/utils.cmake)
|
||||||
setup_gui_app(Dialog)
|
setup_gui_app(
|
||||||
setup_compile_params(Dialog)
|
TARGETS Dialog
|
||||||
|
BUNDLE_ID org.wangwenx190.Dialog
|
||||||
|
BUNDLE_VERSION 1.0.0
|
||||||
|
BUNDLE_VERSION_SHORT 1.0
|
||||||
|
)
|
||||||
|
setup_compile_params(TARGETS Dialog)
|
||||||
if(FRAMELESSHELPER_EXAMPLES_DEPLOYQT)
|
if(FRAMELESSHELPER_EXAMPLES_DEPLOYQT)
|
||||||
deploy_qt_runtime(Dialog)
|
set(__extra_flags)
|
||||||
|
if(FRAMELESSHELPER_NO_INSTALL)
|
||||||
|
set(__extra_flags NO_INSTALL)
|
||||||
|
endif()
|
||||||
|
deploy_qt_runtime(TARGET Dialog ${__extra_flags})
|
||||||
endif()
|
endif()
|
||||||
|
|
|
@ -52,9 +52,18 @@ target_link_libraries(MainWindow PRIVATE
|
||||||
FramelessHelper::Widgets
|
FramelessHelper::Widgets
|
||||||
)
|
)
|
||||||
|
|
||||||
include(../../src/core/cmakehelper.cmake)
|
include(../../cmake/utils.cmake)
|
||||||
setup_gui_app(MainWindow)
|
setup_gui_app(
|
||||||
setup_compile_params(MainWindow)
|
TARGETS MainWindow
|
||||||
|
BUNDLE_ID org.wangwenx190.MainWindow
|
||||||
|
BUNDLE_VERSION 1.0.0
|
||||||
|
BUNDLE_VERSION_SHORT 1.0
|
||||||
|
)
|
||||||
|
setup_compile_params(TARGETS MainWindow)
|
||||||
if(FRAMELESSHELPER_EXAMPLES_DEPLOYQT)
|
if(FRAMELESSHELPER_EXAMPLES_DEPLOYQT)
|
||||||
deploy_qt_runtime(MainWindow)
|
set(__extra_flags)
|
||||||
|
if(FRAMELESSHELPER_NO_INSTALL)
|
||||||
|
set(__extra_flags NO_INSTALL)
|
||||||
|
endif()
|
||||||
|
deploy_qt_runtime(TARGET MainWindow ${__extra_flags})
|
||||||
endif()
|
endif()
|
||||||
|
|
|
@ -25,9 +25,8 @@
|
||||||
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS OpenGL)
|
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS OpenGL)
|
||||||
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS OpenGL)
|
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS OpenGL)
|
||||||
|
|
||||||
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
|
if(QT_VERSION_MAJOR GREATER_EQUAL 6)
|
||||||
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS OpenGLWidgets)
|
find_package(Qt6 REQUIRED COMPONENTS OpenGLWidgets)
|
||||||
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS OpenGLWidgets)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(SOURCES
|
set(SOURCES
|
||||||
|
@ -61,15 +60,24 @@ target_link_libraries(OpenGLWidget PRIVATE
|
||||||
FramelessHelper::Widgets
|
FramelessHelper::Widgets
|
||||||
)
|
)
|
||||||
|
|
||||||
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
|
if(QT_VERSION_MAJOR GREATER_EQUAL 6)
|
||||||
target_link_libraries(OpenGLWidget PRIVATE
|
target_link_libraries(OpenGLWidget PRIVATE
|
||||||
Qt${QT_VERSION_MAJOR}::OpenGLWidgets
|
Qt6::OpenGLWidgets
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
include(../../src/core/cmakehelper.cmake)
|
include(../../cmake/utils.cmake)
|
||||||
setup_gui_app(OpenGLWidget)
|
setup_gui_app(
|
||||||
setup_compile_params(OpenGLWidget)
|
TARGETS OpenGLWidget
|
||||||
|
BUNDLE_ID org.wangwenx190.OpenGLWidget
|
||||||
|
BUNDLE_VERSION 1.0.0
|
||||||
|
BUNDLE_VERSION_SHORT 1.0
|
||||||
|
)
|
||||||
|
setup_compile_params(TARGETS OpenGLWidget)
|
||||||
if(FRAMELESSHELPER_EXAMPLES_DEPLOYQT)
|
if(FRAMELESSHELPER_EXAMPLES_DEPLOYQT)
|
||||||
deploy_qt_runtime(OpenGLWidget)
|
set(__extra_flags)
|
||||||
|
if(FRAMELESSHELPER_NO_INSTALL)
|
||||||
|
set(__extra_flags NO_INSTALL)
|
||||||
|
endif()
|
||||||
|
deploy_qt_runtime(TARGET OpenGLWidget ${__extra_flags})
|
||||||
endif()
|
endif()
|
||||||
|
|
|
@ -35,7 +35,7 @@ set(SOURCES
|
||||||
quicksettings.cpp
|
quicksettings.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
if(${QT_VERSION} VERSION_LESS 6.2)
|
if(QT_VERSION VERSION_LESS "6.2")
|
||||||
list(APPEND SOURCES resources.qrc)
|
list(APPEND SOURCES resources.qrc)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
@ -49,7 +49,7 @@ endif()
|
||||||
|
|
||||||
add_executable(Quick ${SOURCES})
|
add_executable(Quick ${SOURCES})
|
||||||
|
|
||||||
if(${QT_VERSION} VERSION_GREATER_EQUAL 6.2)
|
if(QT_VERSION VERSION_GREATER_EQUAL "6.2")
|
||||||
set(QML_SOURCES
|
set(QML_SOURCES
|
||||||
"qml/Window.qml"
|
"qml/Window.qml"
|
||||||
"qml/ApplicationWindow.qml"
|
"qml/ApplicationWindow.qml"
|
||||||
|
@ -61,7 +61,7 @@ if(${QT_VERSION} VERSION_GREATER_EQUAL 6.2)
|
||||||
qt_add_qml_module(Quick
|
qt_add_qml_module(Quick
|
||||||
URI Demo
|
URI Demo
|
||||||
VERSION 1.0
|
VERSION 1.0
|
||||||
IMPORT_PATH "${PROJECT_BINARY_DIR}/qml"
|
#IMPORT_PATH "${PROJECT_BINARY_DIR}/qml"
|
||||||
OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/qml/Demo"
|
OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/qml/Demo"
|
||||||
RESOURCE_PREFIX "/"
|
RESOURCE_PREFIX "/"
|
||||||
NO_RESOURCE_TARGET_PATH
|
NO_RESOURCE_TARGET_PATH
|
||||||
|
@ -89,12 +89,22 @@ target_compile_definitions(Quick PRIVATE
|
||||||
$<$<OR:$<CONFIG:Debug>,$<CONFIG:RelWithDebInfo>>:QT_QML_DEBUG>
|
$<$<OR:$<CONFIG:Debug>,$<CONFIG:RelWithDebInfo>>:QT_QML_DEBUG>
|
||||||
)
|
)
|
||||||
|
|
||||||
include(../../src/core/cmakehelper.cmake)
|
include(../../cmake/utils.cmake)
|
||||||
setup_gui_app(Quick)
|
setup_gui_app(
|
||||||
setup_compile_params(Quick)
|
TARGETS Quick
|
||||||
|
BUNDLE_ID org.wangwenx190.Quick
|
||||||
|
BUNDLE_VERSION 1.0.0
|
||||||
|
BUNDLE_VERSION_SHORT 1.0
|
||||||
|
)
|
||||||
|
setup_compile_params(TARGETS Quick)
|
||||||
if(FRAMELESSHELPER_EXAMPLES_DEPLOYQT)
|
if(FRAMELESSHELPER_EXAMPLES_DEPLOYQT)
|
||||||
deploy_qt_runtime(Quick
|
set(__extra_flags)
|
||||||
QML_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}"
|
if(FRAMELESSHELPER_NO_INSTALL)
|
||||||
#QML_IMPORT_DIR "${PROJECT_BINARY_DIR}/qml" # Some applications failed to start.
|
set(__extra_flags NO_INSTALL)
|
||||||
|
endif()
|
||||||
|
deploy_qt_runtime(
|
||||||
|
TARGET Quick
|
||||||
|
QML_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/qml"
|
||||||
|
${__extra_flags}
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
|
@ -47,9 +47,18 @@ target_link_libraries(Widget PRIVATE
|
||||||
FramelessHelper::Widgets
|
FramelessHelper::Widgets
|
||||||
)
|
)
|
||||||
|
|
||||||
include(../../src/core/cmakehelper.cmake)
|
include(../../cmake/utils.cmake)
|
||||||
setup_gui_app(Widget)
|
setup_gui_app(
|
||||||
setup_compile_params(Widget)
|
TARGETS Widget
|
||||||
|
BUNDLE_ID org.wangwenx190.Widget
|
||||||
|
BUNDLE_VERSION 1.0.0
|
||||||
|
BUNDLE_VERSION_SHORT 1.0
|
||||||
|
)
|
||||||
|
setup_compile_params(TARGETS Widget)
|
||||||
if(FRAMELESSHELPER_EXAMPLES_DEPLOYQT)
|
if(FRAMELESSHELPER_EXAMPLES_DEPLOYQT)
|
||||||
deploy_qt_runtime(Widget)
|
set(__extra_flags)
|
||||||
|
if(FRAMELESSHELPER_NO_INSTALL)
|
||||||
|
set(__extra_flags NO_INSTALL)
|
||||||
|
endif()
|
||||||
|
deploy_qt_runtime(TARGET Widget ${__extra_flags})
|
||||||
endif()
|
endif()
|
||||||
|
|
|
@ -133,7 +133,6 @@ elseif(UNIX)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WIN32 AND NOT FRAMELESSHELPER_BUILD_STATIC)
|
if(WIN32 AND NOT FRAMELESSHELPER_BUILD_STATIC)
|
||||||
enable_language(RC)
|
|
||||||
configure_file(
|
configure_file(
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/framelesshelper.rc.in
|
${CMAKE_CURRENT_SOURCE_DIR}/framelesshelper.rc.in
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/framelesshelpercore.rc @ONLY)
|
${CMAKE_CURRENT_BINARY_DIR}/framelesshelpercore.rc @ONLY)
|
||||||
|
@ -247,6 +246,20 @@ target_include_directories(${SUB_PROJ_NAME} PUBLIC
|
||||||
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/${SUB_PROJ_PATH}/private>"
|
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/${SUB_PROJ_PATH}/private>"
|
||||||
)
|
)
|
||||||
|
|
||||||
include(cmakehelper.cmake)
|
setup_qt_stuff(TARGETS ${SUB_PROJ_NAME})
|
||||||
setup_compile_params(${SUB_PROJ_NAME})
|
set(__extra_flags)
|
||||||
setup_package_export(${SUB_PROJ_NAME} ${SUB_PROJ_PATH} "${PUBLIC_HEADERS}" "${PUBLIC_HEADERS_ALIAS}" "${PRIVATE_HEADERS}")
|
if(NOT FRAMELESSHELPER_NO_PERMISSIVE_CHECKS)
|
||||||
|
set(__extra_flags PERMISSIVE)
|
||||||
|
endif()
|
||||||
|
setup_compile_params(TARGETS ${SUB_PROJ_NAME} ${__extra_flags})
|
||||||
|
if(NOT FRAMELESSHELPER_NO_INSTALL)
|
||||||
|
setup_package_export(
|
||||||
|
TARGET ${SUB_PROJ_NAME}
|
||||||
|
PACKAGE_NAME ${PROJECT_NAME}
|
||||||
|
NAMESPACE ${PROJECT_NAME}
|
||||||
|
INCLUDE_PATH ${SUB_PROJ_PATH}
|
||||||
|
PUBLIC_HEADERS ${PUBLIC_HEADERS}
|
||||||
|
ALIAS_HEADERS ${PUBLIC_HEADERS_ALIAS}
|
||||||
|
PRIVATE_HEADERS ${PRIVATE_HEADERS}
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
|
@ -1,94 +0,0 @@
|
||||||
# https://github.com/Chuyu-Team/VC-LTL5
|
|
||||||
|
|
||||||
#
|
|
||||||
# VC-LTL自动化加载配置,建议你将此文件单独复制到你的工程再使用,该文件能自动识别当前环境是否存在VC-LTL,并且自动应用。
|
|
||||||
#
|
|
||||||
# 使用方法:
|
|
||||||
# 1. 在“CMakeLists.txt” 添加 “include("VC-LTL helper for cmake.cmake")”。
|
|
||||||
#
|
|
||||||
# VC-LTL默认搜索顺序
|
|
||||||
# 1. “VC-LTL helper for cmake.cmake”所在根目录,即 ${CMAKE_CURRENT_LIST_DIR}
|
|
||||||
# 2. 当前CMake根目录,即 ${CMAKE_CURRENT_SOURCE_DIR}/VC-LTL
|
|
||||||
# 3. 当前项目根目录,即 ${PROJECT_SOURCE_DIR}/VC-LTL
|
|
||||||
# 4. 当前CMake父目录,即 ${CMAKE_CURRENT_SOURCE_DIR}/../VC-LTL
|
|
||||||
# 5. 当前项目根目录,即 ${PROJECT_SOURCE_DIR}/../VC-LTL
|
|
||||||
# 6. 注册表HKEY_CURRENT_USER\Code\VC-LTL@Root
|
|
||||||
#
|
|
||||||
# 把VC-LTL放在其中一个位置即可,VC-LTL就能被自动引用。
|
|
||||||
#
|
|
||||||
# 如果你对默认搜索顺序不满,你可以修改此文件。你也可以直接指定${VC_LTL_Root}宏更加任性的去加载VC-LTL。
|
|
||||||
#
|
|
||||||
|
|
||||||
if(NOT MSVC OR DEFINED __VC_LTL_CMAKE_INCLUDE_GUARD)
|
|
||||||
return()
|
|
||||||
endif()
|
|
||||||
set(__VC_LTL_CMAKE_INCLUDE_GUARD 1)
|
|
||||||
|
|
||||||
#####################################################################VC-LTL设置#####################################################################
|
|
||||||
|
|
||||||
#控制TargetPlatform版本,目前可用版本为5.1.2600.0 6.0.6000.0(默认) 6.2.9200.0 10.0.10240.0 10.0.19041.0
|
|
||||||
if(NOT DEFINED WindowsTargetPlatformMinVersion)
|
|
||||||
set(WindowsTargetPlatformMinVersion "10.0.19041.0" CACHE STRING "" FORCE)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
#启用干净的导入表,消除 ucrt apiset(如:api-ms-win-crt-time-l1-1-0.dll),满足强迫症患者。
|
|
||||||
if(NOT DEFINED CleanImport)
|
|
||||||
set(CleanImport "true" CACHE STRING "" FORCE)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
####################################################################################################################################################
|
|
||||||
|
|
||||||
if(NOT VC_LTL_Root)
|
|
||||||
if(EXISTS ${CMAKE_CURRENT_LIST_DIR}/_msvcrt.h)
|
|
||||||
set(VC_LTL_Root ${CMAKE_CURRENT_LIST_DIR})
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(NOT VC_LTL_Root)
|
|
||||||
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/VC-LTL/_msvcrt.h)
|
|
||||||
set(VC_LTL_Root ${CMAKE_CURRENT_SOURCE_DIR}/VC-LTL)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(NOT VC_LTL_Root)
|
|
||||||
if(EXISTS ${PROJECT_SOURCE_DIR}/VC-LTL/_msvcrt.h)
|
|
||||||
set(VC_LTL_Root ${PROJECT_SOURCE_DIR}/VC-LTL)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(NOT VC_LTL_Root)
|
|
||||||
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/../VC-LTL/_msvcrt.h)
|
|
||||||
set(VC_LTL_Root ${CMAKE_CURRENT_SOURCE_DIR}/../VC-LTL)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(NOT VC_LTL_Root)
|
|
||||||
if(EXISTS ${PROJECT_SOURCE_DIR}/../VC-LTL/_msvcrt.h)
|
|
||||||
set(VC_LTL_Root ${PROJECT_SOURCE_DIR}/../VC-LTL)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(NOT VC_LTL_Root)
|
|
||||||
EXECUTE_PROCESS(COMMAND reg query "HKEY_CURRENT_USER\\Code\\VC-LTL" -v "Root"
|
|
||||||
OUTPUT_VARIABLE FOUND_FILE
|
|
||||||
ERROR_VARIABLE ERROR_INFO
|
|
||||||
)
|
|
||||||
|
|
||||||
string(REGEX MATCH "[a-zA-Z]:\\\\.+\\\\"
|
|
||||||
FOUND_LTL
|
|
||||||
${FOUND_FILE})
|
|
||||||
if (NOT ${FOUND_LTL} STREQUAL "")
|
|
||||||
set(VC_LTL_Root ${FOUND_LTL})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(NOT DEFINED VC_LTL_Root)
|
|
||||||
string(REGEX MATCH "\\\\\\\\.+\\\\" FOUND_LTL ${FOUND_FILE})
|
|
||||||
if (NOT ${FOUND_LTL} STREQUAL "")
|
|
||||||
set(VC_LTL_Root ${FOUND_LTL})
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(VC_LTL_Root)
|
|
||||||
include("${VC_LTL_Root}\\config\\config.cmake")
|
|
||||||
endif()
|
|
|
@ -1,385 +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.
|
|
||||||
]]
|
|
||||||
|
|
||||||
function(setup_compile_params arg_target)
|
|
||||||
target_compile_definitions(${arg_target} PRIVATE
|
|
||||||
QT_NO_CAST_TO_ASCII
|
|
||||||
QT_NO_CAST_FROM_ASCII
|
|
||||||
QT_NO_CAST_FROM_BYTEARRAY
|
|
||||||
QT_NO_URL_CAST_FROM_STRING
|
|
||||||
QT_NO_NARROWING_CONVERSIONS_IN_CONNECT
|
|
||||||
QT_NO_FOREACH
|
|
||||||
#QT_TYPESAFE_FLAGS # QtQuick private headers prevent us from enabling this flag.
|
|
||||||
QT_USE_QSTRINGBUILDER
|
|
||||||
QT_USE_FAST_OPERATOR_PLUS
|
|
||||||
QT_DEPRECATED_WARNINGS # Have no effect since 6.0
|
|
||||||
QT_DEPRECATED_WARNINGS_SINCE=0x070000
|
|
||||||
QT_WARN_DEPRECATED_UP_TO=0x070000 # Since 6.5
|
|
||||||
QT_DISABLE_DEPRECATED_BEFORE=0x070000
|
|
||||||
QT_DISABLE_DEPRECATED_UP_TO=0x070000 # Since 6.5
|
|
||||||
)
|
|
||||||
if(NOT (DEFINED __DONT_DISABLE_QT_KEYWORDS AND __DONT_DISABLE_QT_KEYWORDS))
|
|
||||||
target_compile_definitions(${arg_target} PRIVATE
|
|
||||||
QT_NO_KEYWORDS # Some QtQuick private headers still use the traditional Qt keywords.
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
if(WIN32) # Needed by both MSVC and MinGW, otherwise some APIs we need will be invisible.
|
|
||||||
set(_WIN32_WINNT_WIN10 0x0A00)
|
|
||||||
set(NTDDI_WIN10_NI 0x0A00000C)
|
|
||||||
target_compile_definitions(${arg_target} PRIVATE
|
|
||||||
WINVER=${_WIN32_WINNT_WIN10} _WIN32_WINNT=${_WIN32_WINNT_WIN10}
|
|
||||||
_WIN32_IE=${_WIN32_WINNT_WIN10} NTDDI_VERSION=${NTDDI_WIN10_NI}
|
|
||||||
)
|
|
||||||
else()
|
|
||||||
target_compile_definitions(${arg_target} PRIVATE
|
|
||||||
QT_STRICT_ITERATORS # On Windows we need to re-compile Qt with this flag enabled, so only enable it on non-Windows platforms.
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
if(MSVC)
|
|
||||||
target_compile_definitions(${arg_target} PRIVATE
|
|
||||||
_CRT_NON_CONFORMING_SWPRINTFS _CRT_SECURE_NO_WARNINGS
|
|
||||||
_CRT_SECURE_NO_DEPRECATE _CRT_NONSTDC_NO_WARNINGS
|
|
||||||
_CRT_NONSTDC_NO_DEPRECATE _SCL_SECURE_NO_WARNINGS
|
|
||||||
_SCL_SECURE_NO_DEPRECATE _ENABLE_EXTENDED_ALIGNED_STORAGE
|
|
||||||
_USE_MATH_DEFINES NOMINMAX UNICODE _UNICODE
|
|
||||||
WIN32_LEAN_AND_MEAN WINRT_LEAN_AND_MEAN
|
|
||||||
)
|
|
||||||
target_compile_options(${arg_target} PRIVATE
|
|
||||||
/bigobj /utf-8 $<$<NOT:$<CONFIG:Debug>>:/fp:fast /GT /Gw /Gy /guard:cf /Zc:inline>
|
|
||||||
)
|
|
||||||
target_link_options(${arg_target} PRIVATE
|
|
||||||
$<$<NOT:$<CONFIG:Debug>>:/OPT:REF /OPT:ICF /OPT:LBR /GUARD:CF>
|
|
||||||
/DYNAMICBASE /NXCOMPAT /LARGEADDRESSAWARE /WX
|
|
||||||
)
|
|
||||||
set(__target_type "UNKNOWN")
|
|
||||||
get_target_property(__target_type ${arg_target} TYPE)
|
|
||||||
if(__target_type STREQUAL "EXECUTABLE")
|
|
||||||
target_compile_options(${arg_target} PRIVATE $<$<NOT:$<CONFIG:Debug>>:/GA>)
|
|
||||||
target_link_options(${arg_target} PRIVATE /TSAWARE)
|
|
||||||
endif()
|
|
||||||
if(CMAKE_SIZEOF_VOID_P EQUAL 4)
|
|
||||||
target_link_options(${arg_target} PRIVATE /SAFESEH)
|
|
||||||
endif()
|
|
||||||
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
|
||||||
target_link_options(${arg_target} PRIVATE /HIGHENTROPYVA)
|
|
||||||
endif()
|
|
||||||
if(MSVC_VERSION GREATER_EQUAL 1915) # Visual Studio 2017 version 15.8
|
|
||||||
target_compile_options(${arg_target} PRIVATE $<$<OR:$<CONFIG:Debug>,$<CONFIG:RelWithDebInfo>>:/JMC>)
|
|
||||||
endif()
|
|
||||||
if(MSVC_VERSION GREATER_EQUAL 1920) # Visual Studio 2019 version 16.0
|
|
||||||
target_link_options(${arg_target} PRIVATE $<$<NOT:$<CONFIG:Debug>>:/CETCOMPAT>)
|
|
||||||
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
|
||||||
target_compile_options(${arg_target} PRIVATE /d2FH4)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
if(MSVC_VERSION GREATER_EQUAL 1925) # Visual Studio 2019 version 16.5
|
|
||||||
target_compile_options(${arg_target} PRIVATE $<$<NOT:$<CONFIG:Debug>>:/QIntel-jcc-erratum>) # /Qspectre-load
|
|
||||||
#elseif(MSVC_VERSION GREATER_EQUAL 1912) # Visual Studio 2017 version 15.5
|
|
||||||
# target_compile_options(${arg_target} PRIVATE /Qspectre)
|
|
||||||
endif()
|
|
||||||
#if((MSVC_VERSION GREATER_EQUAL 1927) AND (CMAKE_SIZEOF_VOID_P EQUAL 8)) # Visual Studio 2019 version 16.7
|
|
||||||
# target_compile_options(${arg_target} PRIVATE $<$<NOT:$<CONFIG:Debug>>:/guard:ehcont>)
|
|
||||||
# target_link_options(${arg_target} PRIVATE $<$<NOT:$<CONFIG:Debug>>:/guard:ehcont>)
|
|
||||||
#endif()
|
|
||||||
if(MSVC_VERSION GREATER_EQUAL 1929) # Visual Studio 2019 version 16.10
|
|
||||||
target_compile_options(${arg_target} PRIVATE /await:strict)
|
|
||||||
elseif(MSVC_VERSION GREATER_EQUAL 1900) # Visual Studio 2015
|
|
||||||
target_compile_options(${arg_target} PRIVATE /await)
|
|
||||||
endif()
|
|
||||||
if(MSVC_VERSION GREATER_EQUAL 1930) # Visual Studio 2022 version 17.0
|
|
||||||
target_compile_options(${arg_target} PRIVATE /options:strict)
|
|
||||||
endif()
|
|
||||||
if(NOT FRAMELESSHELPER_NO_PERMISSIVE_CHECKS)
|
|
||||||
target_compile_options(${arg_target} PRIVATE
|
|
||||||
/Zc:auto /Zc:forScope /Zc:implicitNoexcept /Zc:noexceptTypes /Zc:referenceBinding
|
|
||||||
/Zc:rvalueCast /Zc:sizedDealloc /Zc:strictStrings /Zc:throwingNew /Zc:trigraphs
|
|
||||||
/Zc:wchar_t
|
|
||||||
)
|
|
||||||
if(MSVC_VERSION GREATER_EQUAL 1900) # Visual Studio 2015
|
|
||||||
target_compile_options(${arg_target} PRIVATE /Zc:threadSafeInit)
|
|
||||||
endif()
|
|
||||||
if(MSVC_VERSION GREATER_EQUAL 1910) # Visual Studio 2017 version 15.0
|
|
||||||
target_compile_options(${arg_target} PRIVATE /permissive- /Zc:ternary)
|
|
||||||
endif()
|
|
||||||
if(MSVC_VERSION GREATER_EQUAL 1912) # Visual Studio 2017 version 15.5
|
|
||||||
target_compile_options(${arg_target} PRIVATE /Zc:alignedNew)
|
|
||||||
endif()
|
|
||||||
if(MSVC_VERSION GREATER_EQUAL 1913) # Visual Studio 2017 version 15.6
|
|
||||||
target_compile_options(${arg_target} PRIVATE /Zc:externConstexpr)
|
|
||||||
endif()
|
|
||||||
if(MSVC_VERSION GREATER_EQUAL 1914) # Visual Studio 2017 version 15.7
|
|
||||||
target_compile_options(${arg_target} PRIVATE /Zc:__cplusplus)
|
|
||||||
endif()
|
|
||||||
if(MSVC_VERSION GREATER_EQUAL 1921) # Visual Studio 2019 version 16.1
|
|
||||||
target_compile_options(${arg_target} PRIVATE /Zc:char8_t)
|
|
||||||
endif()
|
|
||||||
if(MSVC_VERSION GREATER_EQUAL 1923) # Visual Studio 2019 version 16.3
|
|
||||||
target_compile_options(${arg_target} PRIVATE /Zc:externC)
|
|
||||||
endif()
|
|
||||||
if(MSVC_VERSION GREATER_EQUAL 1924) # Visual Studio 2019 version 16.4
|
|
||||||
target_compile_options(${arg_target} PRIVATE /Zc:hiddenFriend)
|
|
||||||
endif()
|
|
||||||
if(MSVC_VERSION GREATER_EQUAL 1925) # Visual Studio 2019 version 16.5
|
|
||||||
target_compile_options(${arg_target} PRIVATE /Zc:preprocessor /Zc:tlsGuards)
|
|
||||||
endif()
|
|
||||||
if(MSVC_VERSION GREATER_EQUAL 1928) # Visual Studio 2019 version 16.8 & 16.9
|
|
||||||
target_compile_options(${arg_target} PRIVATE /Zc:lambda /Zc:zeroSizeArrayNew)
|
|
||||||
endif()
|
|
||||||
if(MSVC_VERSION GREATER_EQUAL 1931) # Visual Studio 2022 version 17.1
|
|
||||||
target_compile_options(${arg_target} PRIVATE /Zc:static_assert)
|
|
||||||
endif()
|
|
||||||
if(MSVC_VERSION GREATER_EQUAL 1932) # Visual Studio 2022 version 17.2
|
|
||||||
target_compile_options(${arg_target} PRIVATE /Zc:__STDC__)
|
|
||||||
endif()
|
|
||||||
if(MSVC_VERSION GREATER_EQUAL 1934) # Visual Studio 2022 version 17.4
|
|
||||||
target_compile_options(${arg_target} PRIVATE /Zc:enumTypes /Zc:gotoScope /Zc:nrvo)
|
|
||||||
endif()
|
|
||||||
if(MSVC_VERSION GREATER_EQUAL 1935) # Visual Studio 2022 version 17.5
|
|
||||||
target_compile_options(${arg_target} PRIVATE /Zc:templateScope /Zc:checkGwOdr)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
else()
|
|
||||||
target_compile_options(${arg_target} PRIVATE
|
|
||||||
-Wall -Wextra -Werror
|
|
||||||
$<$<NOT:$<CONFIG:Debug>>:-ffunction-sections -fdata-sections> # -fcf-protection=full? -Wa,-mno-branches-within-32B-boundaries?
|
|
||||||
)
|
|
||||||
if(APPLE)
|
|
||||||
target_link_options(${arg_target} PRIVATE
|
|
||||||
$<$<NOT:$<CONFIG:Debug>>:-Wl,-dead_strip>
|
|
||||||
)
|
|
||||||
else()
|
|
||||||
target_link_options(${arg_target} PRIVATE
|
|
||||||
$<$<NOT:$<CONFIG:Debug>>:-Wl,--gc-sections>
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
function(setup_gui_app arg_target)
|
|
||||||
set_target_properties(${arg_target} PROPERTIES
|
|
||||||
WIN32_EXECUTABLE TRUE
|
|
||||||
MACOSX_BUNDLE TRUE
|
|
||||||
MACOSX_BUNDLE_GUI_IDENTIFIER org.wangwenx190.${arg_target}
|
|
||||||
MACOSX_BUNDLE_BUNDLE_VERSION 1.0.0.0
|
|
||||||
MACOSX_BUNDLE_SHORT_VERSION_STRING 1.0
|
|
||||||
)
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
function(setup_package_export arg_target arg_path arg_public arg_alias arg_private)
|
|
||||||
if(FRAMELESSHELPER_NO_INSTALL)
|
|
||||||
return()
|
|
||||||
endif()
|
|
||||||
include(GNUInstallDirs)
|
|
||||||
set(__targets ${arg_target})
|
|
||||||
if(TARGET ${arg_target}_resources_1)
|
|
||||||
list(APPEND __targets ${arg_target}_resources_1) # Ugly hack to workaround a CMake configure error.
|
|
||||||
endif()
|
|
||||||
install(TARGETS ${__targets}
|
|
||||||
EXPORT ${arg_target}Targets
|
|
||||||
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
|
|
||||||
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
|
|
||||||
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
|
|
||||||
INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/${arg_path}"
|
|
||||||
)
|
|
||||||
export(EXPORT ${arg_target}Targets
|
|
||||||
FILE "${CMAKE_CURRENT_BINARY_DIR}/cmake/${arg_target}Targets.cmake"
|
|
||||||
NAMESPACE ${PROJECT_NAME}::
|
|
||||||
)
|
|
||||||
install(FILES ${arg_public} DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/${arg_path}")
|
|
||||||
install(FILES ${arg_alias} DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/${arg_path}")
|
|
||||||
install(FILES ${arg_private} DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/${arg_path}/private")
|
|
||||||
install(EXPORT ${arg_target}Targets
|
|
||||||
FILE ${arg_target}Targets.cmake
|
|
||||||
NAMESPACE ${PROJECT_NAME}::
|
|
||||||
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
|
|
||||||
)
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
function(deploy_qt_runtime arg_target)
|
|
||||||
if(NOT (DEFINED Qt5_FOUND OR DEFINED Qt6_FOUND))
|
|
||||||
find_package(QT NAMES Qt6 Qt5 QUIET COMPONENTS Core)
|
|
||||||
endif()
|
|
||||||
if(NOT (Qt5_FOUND OR Qt6_FOUND))
|
|
||||||
message("You need to install the QtCore module first to be able to deploy the Qt libraries.")
|
|
||||||
return()
|
|
||||||
endif()
|
|
||||||
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core)
|
|
||||||
if(NOT DEFINED QT_QMAKE_EXECUTABLE) # QT_QMAKE_EXECUTABLE is usually defined by QtCreator.
|
|
||||||
get_target_property(QT_QMAKE_EXECUTABLE Qt::qmake IMPORTED_LOCATION)
|
|
||||||
endif()
|
|
||||||
if(NOT EXISTS "${QT_QMAKE_EXECUTABLE}")
|
|
||||||
message("Cannot find the QMake executable.")
|
|
||||||
return()
|
|
||||||
endif()
|
|
||||||
get_filename_component(QT_BIN_DIRECTORY "${QT_QMAKE_EXECUTABLE}" DIRECTORY)
|
|
||||||
find_program(QT_DEPLOY_EXECUTABLE NAMES windeployqt macdeployqt HINTS "${QT_BIN_DIRECTORY}")
|
|
||||||
if(NOT EXISTS "${QT_DEPLOY_EXECUTABLE}")
|
|
||||||
message("Cannot find the deployqt tool.")
|
|
||||||
return()
|
|
||||||
endif()
|
|
||||||
set(__is_quick_app FALSE)
|
|
||||||
cmake_parse_arguments(DEPLOY_QT_RUNTIME_ARGS "" "QML_SOURCE_DIR;QML_IMPORT_DIR" "" ${ARGN})
|
|
||||||
if(WIN32)
|
|
||||||
set(__old_deploy_params)
|
|
||||||
if(${QT_VERSION_MAJOR} LESS 6)
|
|
||||||
set(__old_deploy_params --no-webkit2 --no-angle)
|
|
||||||
endif()
|
|
||||||
set(__quick_deploy_params)
|
|
||||||
if(DEFINED DEPLOY_QT_RUNTIME_ARGS_QML_SOURCE_DIR)
|
|
||||||
set(__is_quick_app TRUE)
|
|
||||||
set(__quick_deploy_params
|
|
||||||
--dir "$<TARGET_FILE_DIR:${arg_target}>/qml"
|
|
||||||
--qmldir "${DEPLOY_QT_RUNTIME_ARGS_QML_SOURCE_DIR}"
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
if(DEFINED DEPLOY_QT_RUNTIME_ARGS_QML_IMPORT_DIR)
|
|
||||||
set(__is_quick_app TRUE)
|
|
||||||
set(__quick_deploy_params
|
|
||||||
${__quick_deploy_params}
|
|
||||||
--qmlimport "${DEPLOY_QT_RUNTIME_ARGS_QML_IMPORT_DIR}"
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
add_custom_command(TARGET ${arg_target} POST_BUILD COMMAND
|
|
||||||
"${QT_DEPLOY_EXECUTABLE}"
|
|
||||||
$<$<CONFIG:Debug>:--debug>
|
|
||||||
$<$<OR:$<CONFIG:MinSizeRel>,$<CONFIG:Release>,$<CONFIG:RelWithDebInfo>>:--release>
|
|
||||||
--libdir "$<TARGET_FILE_DIR:${arg_target}>"
|
|
||||||
--plugindir "$<TARGET_FILE_DIR:${arg_target}>/plugins"
|
|
||||||
--no-translations
|
|
||||||
--no-system-d3d-compiler
|
|
||||||
--no-virtualkeyboard
|
|
||||||
--no-compiler-runtime
|
|
||||||
--no-opengl-sw
|
|
||||||
--force
|
|
||||||
--verbose 0
|
|
||||||
${__quick_deploy_params}
|
|
||||||
${__old_deploy_params}
|
|
||||||
"$<TARGET_FILE:${arg_target}>"
|
|
||||||
)
|
|
||||||
elseif(APPLE)
|
|
||||||
set(__quick_deploy_params)
|
|
||||||
if(DEFINED DEPLOY_QT_RUNTIME_ARGS_QML_SOURCE_DIR)
|
|
||||||
set(__is_quick_app TRUE)
|
|
||||||
set(__quick_deploy_params
|
|
||||||
-qmldir="${DEPLOY_QT_RUNTIME_ARGS_QML_SOURCE_DIR}"
|
|
||||||
-qmlimport="${PROJECT_BINARY_DIR}/qml"
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
if(DEFINED DEPLOY_QT_RUNTIME_ARGS_QML_IMPORT_DIR)
|
|
||||||
set(__is_quick_app TRUE)
|
|
||||||
set(__quick_deploy_params
|
|
||||||
${__quick_deploy_params}
|
|
||||||
-qmlimport="${DEPLOY_QT_RUNTIME_ARGS_QML_IMPORT_DIR}"
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
add_custom_command(TARGET ${arg_target} POST_BUILD COMMAND
|
|
||||||
"${QT_DEPLOY_EXECUTABLE}"
|
|
||||||
"$<TARGET_BUNDLE_DIR:${arg_target}>"
|
|
||||||
-verbose=0
|
|
||||||
${__quick_deploy_params}
|
|
||||||
)
|
|
||||||
elseif(UNIX)
|
|
||||||
# TODO
|
|
||||||
endif()
|
|
||||||
if(NOT FRAMELESSHELPER_NO_INSTALL)
|
|
||||||
include(GNUInstallDirs)
|
|
||||||
install(TARGETS ${arg_target}
|
|
||||||
BUNDLE DESTINATION .
|
|
||||||
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
|
|
||||||
)
|
|
||||||
if(QT_VERSION VERSION_GREATER_EQUAL "6.3")
|
|
||||||
set(__deploy_script)
|
|
||||||
if(${__is_quick_app})
|
|
||||||
qt_generate_deploy_qml_app_script(
|
|
||||||
TARGET ${arg_target}
|
|
||||||
FILENAME_VARIABLE __deploy_script
|
|
||||||
#MACOS_BUNDLE_POST_BUILD
|
|
||||||
NO_UNSUPPORTED_PLATFORM_ERROR
|
|
||||||
DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
|
|
||||||
)
|
|
||||||
else()
|
|
||||||
qt_generate_deploy_app_script(
|
|
||||||
TARGET ${arg_target}
|
|
||||||
FILENAME_VARIABLE __deploy_script
|
|
||||||
NO_UNSUPPORTED_PLATFORM_ERROR
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
install(SCRIPT "${__deploy_script}")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
function(setup_translations arg_target)
|
|
||||||
# Qt5's CMake functions to create translations lack many features
|
|
||||||
# we need and what's worse, they also have a severe bug which will
|
|
||||||
# wipe out our .ts files' contents every time we call them, so we
|
|
||||||
# really can't use them until Qt6 (the functions have been completely
|
|
||||||
# re-written in Qt6 and according to my experiments they work reliably
|
|
||||||
# now finally).
|
|
||||||
if(NOT DEFINED Qt6LinguistTools_FOUND)
|
|
||||||
find_package(Qt6 QUIET COMPONENTS LinguistTools)
|
|
||||||
endif()
|
|
||||||
if(NOT Qt6LinguistTools_FOUND)
|
|
||||||
message("You need to install the Qt Linguist Tools first to be able to create translations.")
|
|
||||||
return()
|
|
||||||
endif()
|
|
||||||
cmake_parse_arguments(TRANSLATION_ARGS "" "TS_DIR;QM_DIR;INSTALL_DIR" "LOCALES" ${ARGN})
|
|
||||||
if(NOT DEFINED TRANSLATION_ARGS_LOCALES)
|
|
||||||
message("You need to specify at least one locale.")
|
|
||||||
return()
|
|
||||||
endif()
|
|
||||||
set(__ts_dir translations)
|
|
||||||
if(DEFINED TRANSLATION_ARGS_TS_DIR)
|
|
||||||
set(__ts_dir "${TRANSLATION_ARGS_TS_DIR}")
|
|
||||||
endif()
|
|
||||||
set(__qm_dir "${PROJECT_BINARY_DIR}/translations")
|
|
||||||
if(DEFINED TRANSLATION_ARGS_QM_DIR)
|
|
||||||
set(__qm_dir "${TRANSLATION_ARGS_QM_DIR}")
|
|
||||||
endif()
|
|
||||||
set(__ts_files)
|
|
||||||
foreach(__locale ${TRANSLATION_ARGS_LOCALES})
|
|
||||||
list(APPEND __ts_files "${__ts_dir}/${arg_target}_${__locale}.ts")
|
|
||||||
endforeach()
|
|
||||||
set_source_files_properties(${__ts_files} PROPERTIES
|
|
||||||
OUTPUT_LOCATION "${__qm_dir}"
|
|
||||||
)
|
|
||||||
set(__qm_files)
|
|
||||||
qt_add_translations(${arg_target}
|
|
||||||
TS_FILES ${__ts_files}
|
|
||||||
QM_FILES_OUTPUT_VARIABLE __qm_files
|
|
||||||
LUPDATE_OPTIONS
|
|
||||||
-no-obsolete # Don't keep vanished translation contexts.
|
|
||||||
LRELEASE_OPTIONS
|
|
||||||
-compress # Compress the QM file if the file size can be decreased siginificantly.
|
|
||||||
-nounfinished # Don't include unfinished translations (to save file size).
|
|
||||||
-removeidentical # Don't include translations that are the same with their original texts (to save file size).
|
|
||||||
)
|
|
||||||
if(NOT FRAMELESSHELPER_NO_INSTALL)
|
|
||||||
set(__inst_dir translations)
|
|
||||||
if(DEFINED TRANSLATION_ARGS_INSTALL_DIR)
|
|
||||||
set(__inst_dir "${TRANSLATION_ARGS_INSTALL_DIR}")
|
|
||||||
endif()
|
|
||||||
install(FILES ${__qm_files} DESTINATION "${__inst_dir}")
|
|
||||||
endif()
|
|
||||||
endfunction()
|
|
|
@ -82,7 +82,6 @@ set(SOURCES
|
||||||
)
|
)
|
||||||
|
|
||||||
if(WIN32 AND NOT FRAMELESSHELPER_BUILD_STATIC)
|
if(WIN32 AND NOT FRAMELESSHELPER_BUILD_STATIC)
|
||||||
enable_language(RC)
|
|
||||||
configure_file(
|
configure_file(
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/../core/framelesshelper.rc.in
|
${CMAKE_CURRENT_SOURCE_DIR}/../core/framelesshelper.rc.in
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/framelesshelperquick.rc @ONLY)
|
${CMAKE_CURRENT_BINARY_DIR}/framelesshelperquick.rc @ONLY)
|
||||||
|
@ -108,7 +107,7 @@ endif()
|
||||||
set(__import_uri org/wangwenx190/${PROJECT_NAME})
|
set(__import_uri org/wangwenx190/${PROJECT_NAME})
|
||||||
set(__import_dir ${__import_base_dir}/${__import_uri})
|
set(__import_dir ${__import_base_dir}/${__import_uri})
|
||||||
|
|
||||||
if(${QT_VERSION} VERSION_GREATER_EQUAL 6.2)
|
if(QT_VERSION VERSION_GREATER_EQUAL "6.2")
|
||||||
qt_add_qml_module(${SUB_PROJ_NAME}
|
qt_add_qml_module(${SUB_PROJ_NAME}
|
||||||
URI org.wangwenx190.${PROJECT_NAME}
|
URI org.wangwenx190.${PROJECT_NAME}
|
||||||
VERSION 1.0
|
VERSION 1.0
|
||||||
|
@ -119,36 +118,38 @@ if(${QT_VERSION} VERSION_GREATER_EQUAL 6.2)
|
||||||
QtQuick/auto
|
QtQuick/auto
|
||||||
QtQuick.Controls.Basic/auto
|
QtQuick.Controls.Basic/auto
|
||||||
)
|
)
|
||||||
set(__lib_prefix)
|
if(NOT FRAMELESSHELPER_NO_INSTALL)
|
||||||
if(UNIX)
|
set(__lib_prefix)
|
||||||
set(__lib_prefix lib)
|
if(UNIX)
|
||||||
endif()
|
set(__lib_prefix lib)
|
||||||
set(__lib_suffix)
|
endif()
|
||||||
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
set(__lib_suffix)
|
||||||
set(__lib_suffix ${CMAKE_DEBUG_POSTFIX})
|
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||||
endif()
|
set(__lib_suffix ${CMAKE_DEBUG_POSTFIX})
|
||||||
set(__lib_ext)
|
endif()
|
||||||
if(FRAMELESSHELPER_BUILD_STATIC)
|
set(__lib_ext)
|
||||||
if(WIN32)
|
if(FRAMELESSHELPER_BUILD_STATIC)
|
||||||
set(__lib_ext lib)
|
if(WIN32)
|
||||||
|
set(__lib_ext lib)
|
||||||
|
else()
|
||||||
|
set(__lib_ext a)
|
||||||
|
endif()
|
||||||
else()
|
else()
|
||||||
set(__lib_ext a)
|
if(WIN32)
|
||||||
endif()
|
set(__lib_ext dll)
|
||||||
else()
|
elseif(APPLE)
|
||||||
if(WIN32)
|
set(__lib_ext dylib)
|
||||||
set(__lib_ext dll)
|
elseif(UNIX)
|
||||||
elseif(APPLE)
|
set(__lib_ext so)
|
||||||
set(__lib_ext dylib)
|
endif()
|
||||||
elseif(UNIX)
|
|
||||||
set(__lib_ext so)
|
|
||||||
endif()
|
endif()
|
||||||
|
install(FILES
|
||||||
|
"${__import_dir}/qmldir"
|
||||||
|
"${__import_dir}/${SUB_PROJ_NAME}.qmltypes"
|
||||||
|
"${__import_dir}/${__lib_prefix}${SUB_PROJ_NAME}plugin${__lib_suffix}.${__lib_ext}"
|
||||||
|
DESTINATION "${CMAKE_INSTALL_PREFIX}/qml/${__import_uri}"
|
||||||
|
)
|
||||||
endif()
|
endif()
|
||||||
install(FILES
|
|
||||||
"${__import_dir}/qmldir"
|
|
||||||
"${__import_dir}/${SUB_PROJ_NAME}.qmltypes"
|
|
||||||
"${__import_dir}/${__lib_prefix}${SUB_PROJ_NAME}plugin${__lib_suffix}.${__lib_ext}"
|
|
||||||
DESTINATION ${CMAKE_INSTALL_PREFIX}/qml/${__import_uri}
|
|
||||||
)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(FRAMELESSHELPER_BUILD_STATIC)
|
if(FRAMELESSHELPER_BUILD_STATIC)
|
||||||
|
@ -204,8 +205,20 @@ target_include_directories(${SUB_PROJ_NAME} PUBLIC
|
||||||
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/${SUB_PROJ_PATH}/private>"
|
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/${SUB_PROJ_PATH}/private>"
|
||||||
)
|
)
|
||||||
|
|
||||||
set(__DONT_DISABLE_QT_KEYWORDS ON)
|
setup_qt_stuff(TARGETS ${SUB_PROJ_NAME} ALLOW_KEYWORD)
|
||||||
|
set(__extra_flags)
|
||||||
include(../core/cmakehelper.cmake)
|
if(NOT FRAMELESSHELPER_NO_PERMISSIVE_CHECKS)
|
||||||
setup_compile_params(${SUB_PROJ_NAME})
|
set(__extra_flags PERMISSIVE)
|
||||||
setup_package_export(${SUB_PROJ_NAME} ${SUB_PROJ_PATH} "${PUBLIC_HEADERS}" "${PUBLIC_HEADERS_ALIAS}" "${PRIVATE_HEADERS}")
|
endif()
|
||||||
|
setup_compile_params(TARGETS ${SUB_PROJ_NAME} ${__extra_flags})
|
||||||
|
if(NOT FRAMELESSHELPER_NO_INSTALL)
|
||||||
|
setup_package_export(
|
||||||
|
TARGET ${SUB_PROJ_NAME}
|
||||||
|
PACKAGE_NAME ${PROJECT_NAME}
|
||||||
|
NAMESPACE ${PROJECT_NAME}
|
||||||
|
INCLUDE_PATH ${SUB_PROJ_PATH}
|
||||||
|
PUBLIC_HEADERS ${PUBLIC_HEADERS}
|
||||||
|
ALIAS_HEADERS ${PUBLIC_HEADERS_ALIAS}
|
||||||
|
PRIVATE_HEADERS ${PRIVATE_HEADERS}
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
|
@ -70,7 +70,6 @@ set(SOURCES
|
||||||
)
|
)
|
||||||
|
|
||||||
if(WIN32 AND NOT FRAMELESSHELPER_BUILD_STATIC)
|
if(WIN32 AND NOT FRAMELESSHELPER_BUILD_STATIC)
|
||||||
enable_language(RC)
|
|
||||||
configure_file(
|
configure_file(
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/../core/framelesshelper.rc.in
|
${CMAKE_CURRENT_SOURCE_DIR}/../core/framelesshelper.rc.in
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/framelesshelperwidgets.rc @ONLY)
|
${CMAKE_CURRENT_BINARY_DIR}/framelesshelperwidgets.rc @ONLY)
|
||||||
|
@ -134,6 +133,20 @@ target_include_directories(${SUB_PROJ_NAME} PUBLIC
|
||||||
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/${SUB_PROJ_PATH}/private>"
|
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/${SUB_PROJ_PATH}/private>"
|
||||||
)
|
)
|
||||||
|
|
||||||
include(../core/cmakehelper.cmake)
|
setup_qt_stuff(TARGETS ${SUB_PROJ_NAME})
|
||||||
setup_compile_params(${SUB_PROJ_NAME})
|
set(__extra_flags)
|
||||||
setup_package_export(${SUB_PROJ_NAME} ${SUB_PROJ_PATH} "${PUBLIC_HEADERS}" "${PUBLIC_HEADERS_ALIAS}" "${PRIVATE_HEADERS}")
|
if(NOT FRAMELESSHELPER_NO_PERMISSIVE_CHECKS)
|
||||||
|
set(__extra_flags PERMISSIVE)
|
||||||
|
endif()
|
||||||
|
setup_compile_params(TARGETS ${SUB_PROJ_NAME} ${__extra_flags})
|
||||||
|
if(NOT FRAMELESSHELPER_NO_INSTALL)
|
||||||
|
setup_package_export(
|
||||||
|
TARGET ${SUB_PROJ_NAME}
|
||||||
|
PACKAGE_NAME ${PROJECT_NAME}
|
||||||
|
NAMESPACE ${PROJECT_NAME}
|
||||||
|
INCLUDE_PATH ${SUB_PROJ_PATH}
|
||||||
|
PUBLIC_HEADERS ${PUBLIC_HEADERS}
|
||||||
|
ALIAS_HEADERS ${PUBLIC_HEADERS_ALIAS}
|
||||||
|
PRIVATE_HEADERS ${PRIVATE_HEADERS}
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
Loading…
Reference in New Issue