examples: update cmake project

Signed-off-by: Yuhang Zhao <2546789017@qq.com>
This commit is contained in:
Yuhang Zhao 2023-02-19 16:31:24 +08:00
parent cf2bc7c1b9
commit 9e341e4e40
19 changed files with 394 additions and 398 deletions

View File

@ -67,6 +67,27 @@ jobs:
run: | run: |
mkdir ci-test-build mkdir ci-test-build
cd ci-test-build cd ci-test-build
cmake -DCMAKE_MESSAGE_LOG_LEVEL=STATUS -DCMAKE_C_COMPILER=${{ matrix.CC }} -DCMAKE_CXX_COMPILER=${{ matrix.CXX }} -DCMAKE_INSTALL_PREFIX=../ci-test-install -DCMAKE_BUILD_TYPE=Release -DFRAMELESSHELPER_BUILD_EXAMPLES=ON ${{ matrix.lib_type_flag }} -DFRAMELESSHELPER_ENABLE_SPECTRE=ON -DFRAMELESSHELPER_ENABLE_EHCONTGUARD=ON -DFRAMELESSHELPER_ENABLE_INTELCET=ON -DFRAMELESSHELPER_ENABLE_INTELJCC=ON -DFRAMELESSHELPER_ENABLE_CFGUARD=ON -GNinja .. cmake -DCMAKE_MESSAGE_LOG_LEVEL=STATUS -DCMAKE_C_COMPILER=${{ matrix.CC }} -DCMAKE_CXX_COMPILER=${{ matrix.CXX }} -DCMAKE_INSTALL_PREFIX=../install -DCMAKE_BUILD_TYPE=Release -DFRAMELESSHELPER_BUILD_EXAMPLES=ON ${{ matrix.lib_type_flag }} -DFRAMELESSHELPER_ENABLE_SPECTRE=ON -DFRAMELESSHELPER_ENABLE_INTELCET=ON -DFRAMELESSHELPER_ENABLE_INTELJCC=ON -DFRAMELESSHELPER_ENABLE_CFGUARD=ON -GNinja ..
cmake --build . --target all --config Release --parallel cmake --build . --target all --config Release --parallel
cmake --install . --config Release --strip cmake --install . --config Release --strip
cd ..
rm -rf ./ci-test-build
- name: Build standalone MainWindow example with CMake
run: |
mkdir ci-test-build
cd ci-test-build
cmake -DCMAKE_PREFIX_PATH=../install -DCMAKE_MESSAGE_LOG_LEVEL=STATUS -DCMAKE_C_COMPILER=${{ matrix.CC }} -DCMAKE_CXX_COMPILER=${{ matrix.CXX }} -DCMAKE_BUILD_TYPE=Release -DFRAMELESSHELPER_EXAMPLES_STANDALONE=ON -GNinja ../examples/mainwindow
cmake --build . --target all --config Release --parallel
cd ..
rm -rf ./ci-test-build
- name: Build standalone Quick example with CMake
if: ${{ matrix.qt-version == '6.4.2' }}
run: |
mkdir ci-test-build
cd ci-test-build
cmake -DCMAKE_PREFIX_PATH=../install -DCMAKE_MESSAGE_LOG_LEVEL=STATUS -DCMAKE_C_COMPILER=${{ matrix.CC }} -DCMAKE_CXX_COMPILER=${{ matrix.CXX }} -DCMAKE_BUILD_TYPE=Release -DFRAMELESSHELPER_EXAMPLES_STANDALONE=ON -GNinja ../examples/quick
cmake --build . --target all --config Release --parallel
cd ..
rm -rf ./ci-test-build

View File

@ -25,7 +25,7 @@
cmake_minimum_required(VERSION 3.20) cmake_minimum_required(VERSION 3.20)
project(FramelessHelper project(FramelessHelper
VERSION 2.3.5 VERSION "2.3.5"
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/"
) )
@ -48,6 +48,7 @@ option(FRAMELESSHELPER_ENABLE_EHCONTGUARD "MSVC only: Enable EH Continuation (EH
option(FRAMELESSHELPER_ENABLE_INTELCET "Enable Intel CET." ON) option(FRAMELESSHELPER_ENABLE_INTELCET "Enable Intel CET." ON)
option(FRAMELESSHELPER_ENABLE_INTELJCC "Enable Intel JCC." ON) option(FRAMELESSHELPER_ENABLE_INTELJCC "Enable Intel JCC." ON)
option(FRAMELESSHELPER_ENABLE_CFGUARD "Enable Control Flow Guard (CFG)." ON) option(FRAMELESSHELPER_ENABLE_CFGUARD "Enable Control Flow Guard (CFG)." ON)
option(FRAMELESSHELPER_EXAMPLES_STANDALONE "Build the demo projects as standalone CMake projects." OFF)
if(FRAMELESSHELPER_NO_BUNDLE_RESOURCE) if(FRAMELESSHELPER_NO_BUNDLE_RESOURCE)
message(WARNING "Nothing will be embeded into FramelessHelper, the chrome buttons will have no icon.") message(WARNING "Nothing will be embeded into FramelessHelper, the chrome buttons will have no icon.")
@ -98,8 +99,8 @@ if(FRAMELESSHELPER_NO_INSTALL)
list(APPEND __extra_flags NO_INSTALL) list(APPEND __extra_flags NO_INSTALL)
endif() endif()
prepare_package_export( prepare_package_export(
PACKAGE_NAME ${PROJECT_NAME} PACKAGE_NAME "${PROJECT_NAME}"
PACKAGE_VERSION ${PROJECT_VERSION} PACKAGE_VERSION "${PROJECT_VERSION}"
${__extra_flags} ${__extra_flags}
) )
unset(__extra_flags) unset(__extra_flags)
@ -181,5 +182,6 @@ if(NOT FRAMELESSHELPER_NO_SUMMARY)
message("Enable Intel CET: ${FRAMELESSHELPER_ENABLE_INTELCET}") message("Enable Intel CET: ${FRAMELESSHELPER_ENABLE_INTELCET}")
message("Enable Intel JCC: ${FRAMELESSHELPER_ENABLE_INTELJCC}") message("Enable Intel JCC: ${FRAMELESSHELPER_ENABLE_INTELJCC}")
message("Enable Control Flow Guard (CFG): ${FRAMELESSHELPER_ENABLE_CFGUARD}") message("Enable Control Flow Guard (CFG): ${FRAMELESSHELPER_ENABLE_CFGUARD}")
message("Build standalone demo projects: ${FRAMELESSHELPER_EXAMPLES_STANDALONE}")
message("-----------------------------------------------------------------") message("-----------------------------------------------------------------")
endif() endif()

View File

@ -22,7 +22,28 @@
SOFTWARE. SOFTWARE.
]] ]]
set(SOURCES cmake_minimum_required(VERSION 3.20)
project(FramelessHelperDemo-Dialog VERSION 1.0)
include(../../cmake/utils.cmake)
setup_project(
QT_PROJECT
LANGUAGES CXX RC
NO_WARNING
ENABLE_LTO
)
if(FRAMELESSHELPER_EXAMPLES_STANDALONE)
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)
find_package(FramelessHelper REQUIRED COMPONENTS Core Widgets)
endif()
add_executable(${PROJECT_NAME})
target_sources(${PROJECT_NAME} PRIVATE
../shared/log.h ../shared/log.h
../shared/log.cpp ../shared/log.cpp
../shared/settings.h ../shared/settings.h
@ -33,51 +54,53 @@ set(SOURCES
) )
if(WIN32) if(WIN32)
enable_language(RC) set(__rc_path "${PROJECT_BINARY_DIR}/${PROJECT_NAME}.rc")
list(APPEND SOURCES generate_win32_rc_file(
../shared/example.rc PATH "${__rc_path}"
../shared/example.manifest VERSION "${PROJECT_VERSION}"
COMPANY "wangwenx190"
DESCRIPTION "FramelessHelper Demo Application: Dialog"
COPYRIGHT "MIT License"
PRODUCT "FramelessHelper Demo"
ICONS "../shared/example.ico"
)
set(__manifest_path "${PROJECT_BINARY_DIR}/${PROJECT_NAME}.manifest")
generate_win32_manifest_file(
PATH "${__manifest_path}"
ID "org.wangwenx190.demo.Dialog"
VERSION "${PROJECT_VERSION}"
VISTA_COMPAT
WIN7_COMPAT
WIN8_COMPAT
WIN8_1_COMPAT
WIN10_COMPAT
WIN11_COMPAT
XAML_ISLANDS_COMPAT
UTF8_CODEPAGE
)
target_sources(${PROJECT_NAME} PRIVATE
"${__rc_path}"
"${__manifest_path}"
) )
endif() endif()
add_executable(Dialog ${SOURCES}) target_link_libraries(${PROJECT_NAME} PRIVATE
target_link_libraries(Dialog PRIVATE
Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Widgets
FramelessHelper::Core
FramelessHelper::Widgets FramelessHelper::Widgets
) )
include(../../cmake/utils.cmake)
setup_gui_app( setup_gui_app(
TARGETS Dialog TARGETS ${PROJECT_NAME}
BUNDLE_ID org.wangwenx190.Dialog BUNDLE_ID "org.wangwenx190.demo.Dialog"
BUNDLE_VERSION 1.0.0 BUNDLE_VERSION "1.0.0"
BUNDLE_VERSION_SHORT 1.0 BUNDLE_VERSION_SHORT "1.0"
) )
set(__extra_flags)
if(NOT FRAMELESSHELPER_NO_PERMISSIVE_CHECKS)
list(APPEND __extra_flags PERMISSIVE)
endif()
if(FRAMELESSHELPER_ENABLE_SPECTRE)
list(APPEND __extra_flags SPECTRE)
endif()
if(FRAMELESSHELPER_ENABLE_EHCONTGUARD)
list(APPEND __extra_flags EHCONTGUARD)
endif()
if(FRAMELESSHELPER_ENABLE_INTELCET)
list(APPEND __extra_flags INTELCET)
endif()
if(FRAMELESSHELPER_ENABLE_INTELJCC)
list(APPEND __extra_flags INTELJCC)
endif()
if(FRAMELESSHELPER_ENABLE_CFGUARD)
list(APPEND __extra_flags CFGUARD)
endif()
setup_compile_params(TARGETS Dialog ${__extra_flags})
if(FRAMELESSHELPER_EXAMPLES_DEPLOYQT) if(FRAMELESSHELPER_EXAMPLES_DEPLOYQT)
set(__extra_flags) set(__extra_flags)
if(FRAMELESSHELPER_NO_INSTALL) if(FRAMELESSHELPER_NO_INSTALL)
set(__extra_flags NO_INSTALL) set(__extra_flags NO_INSTALL)
endif() endif()
deploy_qt_runtime(TARGET Dialog ${__extra_flags}) deploy_qt_runtime(TARGET ${PROJECT_NAME} ${__extra_flags})
endif() endif()

View File

@ -22,7 +22,28 @@
SOFTWARE. SOFTWARE.
]] ]]
set(SOURCES cmake_minimum_required(VERSION 3.20)
project(FramelessHelperDemo-MainWindow VERSION 1.0)
include(../../cmake/utils.cmake)
setup_project(
QT_PROJECT
LANGUAGES CXX RC
NO_WARNING
ENABLE_LTO
)
if(FRAMELESSHELPER_EXAMPLES_STANDALONE)
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)
find_package(FramelessHelper REQUIRED COMPONENTS Core Widgets)
endif()
add_executable(${PROJECT_NAME})
target_sources(${PROJECT_NAME} PRIVATE
../shared/log.h ../shared/log.h
../shared/log.cpp ../shared/log.cpp
../shared/settings.h ../shared/settings.h
@ -38,51 +59,53 @@ set(SOURCES
) )
if(WIN32) if(WIN32)
enable_language(RC) set(__rc_path "${PROJECT_BINARY_DIR}/${PROJECT_NAME}.rc")
list(APPEND SOURCES generate_win32_rc_file(
../shared/example.rc PATH "${__rc_path}"
../shared/example.manifest VERSION "${PROJECT_VERSION}"
COMPANY "wangwenx190"
DESCRIPTION "FramelessHelper Demo Application: MainWindow"
COPYRIGHT "MIT License"
PRODUCT "FramelessHelper Demo"
ICONS "../shared/example.ico"
)
set(__manifest_path "${PROJECT_BINARY_DIR}/${PROJECT_NAME}.manifest")
generate_win32_manifest_file(
PATH "${__manifest_path}"
ID "org.wangwenx190.demo.MainWindow"
VERSION "${PROJECT_VERSION}"
VISTA_COMPAT
WIN7_COMPAT
WIN8_COMPAT
WIN8_1_COMPAT
WIN10_COMPAT
WIN11_COMPAT
XAML_ISLANDS_COMPAT
UTF8_CODEPAGE
)
target_sources(${PROJECT_NAME} PRIVATE
"${__rc_path}"
"${__manifest_path}"
) )
endif() endif()
add_executable(MainWindow ${SOURCES}) target_link_libraries(${PROJECT_NAME} PRIVATE
target_link_libraries(MainWindow PRIVATE
Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Widgets
FramelessHelper::Core
FramelessHelper::Widgets FramelessHelper::Widgets
) )
include(../../cmake/utils.cmake)
setup_gui_app( setup_gui_app(
TARGETS MainWindow TARGETS ${PROJECT_NAME}
BUNDLE_ID org.wangwenx190.MainWindow BUNDLE_ID "org.wangwenx190.demo.MainWindow"
BUNDLE_VERSION 1.0.0 BUNDLE_VERSION "1.0.0"
BUNDLE_VERSION_SHORT 1.0 BUNDLE_VERSION_SHORT "1.0"
) )
set(__extra_flags)
if(NOT FRAMELESSHELPER_NO_PERMISSIVE_CHECKS)
list(APPEND __extra_flags PERMISSIVE)
endif()
if(FRAMELESSHELPER_ENABLE_SPECTRE)
list(APPEND __extra_flags SPECTRE)
endif()
if(FRAMELESSHELPER_ENABLE_EHCONTGUARD)
list(APPEND __extra_flags EHCONTGUARD)
endif()
if(FRAMELESSHELPER_ENABLE_INTELCET)
list(APPEND __extra_flags INTELCET)
endif()
if(FRAMELESSHELPER_ENABLE_INTELJCC)
list(APPEND __extra_flags INTELJCC)
endif()
if(FRAMELESSHELPER_ENABLE_CFGUARD)
list(APPEND __extra_flags CFGUARD)
endif()
setup_compile_params(TARGETS MainWindow ${__extra_flags})
if(FRAMELESSHELPER_EXAMPLES_DEPLOYQT) if(FRAMELESSHELPER_EXAMPLES_DEPLOYQT)
set(__extra_flags) set(__extra_flags)
if(FRAMELESSHELPER_NO_INSTALL) if(FRAMELESSHELPER_NO_INSTALL)
set(__extra_flags NO_INSTALL) set(__extra_flags NO_INSTALL)
endif() endif()
deploy_qt_runtime(TARGET MainWindow ${__extra_flags}) deploy_qt_runtime(TARGET ${PROJECT_NAME} ${__extra_flags})
endif() endif()

View File

@ -22,14 +22,31 @@
SOFTWARE. SOFTWARE.
]] ]]
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS OpenGL) cmake_minimum_required(VERSION 3.20)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS OpenGL)
if(QT_VERSION_MAJOR GREATER_EQUAL 6) project(FramelessHelperDemo-OpenGLWidget VERSION 1.0)
find_package(Qt6 REQUIRED COMPONENTS OpenGLWidgets)
include(../../cmake/utils.cmake)
setup_project(
QT_PROJECT
LANGUAGES CXX RC
NO_WARNING
ENABLE_LTO
)
if(FRAMELESSHELPER_EXAMPLES_STANDALONE)
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets OpenGL)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets OpenGL)
if(QT_VERSION_MAJOR GREATER_EQUAL 6)
find_package(Qt6 REQUIRED COMPONENTS OpenGLWidgets)
endif()
find_package(FramelessHelper REQUIRED COMPONENTS Core Widgets)
endif() endif()
set(SOURCES add_executable(${PROJECT_NAME})
target_sources(${PROJECT_NAME} PRIVATE
../shared/log.h ../shared/log.h
../shared/log.cpp ../shared/log.cpp
../shared/settings.h ../shared/settings.h
@ -45,58 +62,60 @@ set(SOURCES
) )
if(WIN32) if(WIN32)
enable_language(RC) set(__rc_path "${PROJECT_BINARY_DIR}/${PROJECT_NAME}.rc")
list(APPEND SOURCES generate_win32_rc_file(
../shared/example.rc PATH "${__rc_path}"
../shared/example.manifest VERSION "${PROJECT_VERSION}"
COMPANY "wangwenx190"
DESCRIPTION "FramelessHelper Demo Application: OpenGLWidget"
COPYRIGHT "MIT License"
PRODUCT "FramelessHelper Demo"
ICONS "../shared/example.ico"
)
set(__manifest_path "${PROJECT_BINARY_DIR}/${PROJECT_NAME}.manifest")
generate_win32_manifest_file(
PATH "${__manifest_path}"
ID "org.wangwenx190.demo.OpenGLWidget"
VERSION "${PROJECT_VERSION}"
VISTA_COMPAT
WIN7_COMPAT
WIN8_COMPAT
WIN8_1_COMPAT
WIN10_COMPAT
WIN11_COMPAT
XAML_ISLANDS_COMPAT
UTF8_CODEPAGE
)
target_sources(${PROJECT_NAME} PRIVATE
"${__rc_path}"
"${__manifest_path}"
) )
endif() endif()
add_executable(OpenGLWidget ${SOURCES}) target_link_libraries(${PROJECT_NAME} PRIVATE
target_link_libraries(OpenGLWidget PRIVATE
Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Widgets
Qt${QT_VERSION_MAJOR}::OpenGL Qt${QT_VERSION_MAJOR}::OpenGL
FramelessHelper::Core
FramelessHelper::Widgets FramelessHelper::Widgets
) )
if(QT_VERSION_MAJOR GREATER_EQUAL 6) if(TARGET Qt6::OpenGLWidgets)
target_link_libraries(OpenGLWidget PRIVATE target_link_libraries(${PROJECT_NAME} PRIVATE
Qt6::OpenGLWidgets Qt6::OpenGLWidgets
) )
endif() endif()
include(../../cmake/utils.cmake)
setup_gui_app( setup_gui_app(
TARGETS OpenGLWidget TARGETS ${PROJECT_NAME}
BUNDLE_ID org.wangwenx190.OpenGLWidget BUNDLE_ID "org.wangwenx190.demo.OpenGLWidget"
BUNDLE_VERSION 1.0.0 BUNDLE_VERSION "1.0.0"
BUNDLE_VERSION_SHORT 1.0 BUNDLE_VERSION_SHORT "1.0"
) )
set(__extra_flags)
if(NOT FRAMELESSHELPER_NO_PERMISSIVE_CHECKS)
list(APPEND __extra_flags PERMISSIVE)
endif()
if(FRAMELESSHELPER_ENABLE_SPECTRE)
list(APPEND __extra_flags SPECTRE)
endif()
if(FRAMELESSHELPER_ENABLE_EHCONTGUARD)
list(APPEND __extra_flags EHCONTGUARD)
endif()
if(FRAMELESSHELPER_ENABLE_INTELCET)
list(APPEND __extra_flags INTELCET)
endif()
if(FRAMELESSHELPER_ENABLE_INTELJCC)
list(APPEND __extra_flags INTELJCC)
endif()
if(FRAMELESSHELPER_ENABLE_CFGUARD)
list(APPEND __extra_flags CFGUARD)
endif()
setup_compile_params(TARGETS OpenGLWidget ${__extra_flags})
if(FRAMELESSHELPER_EXAMPLES_DEPLOYQT) if(FRAMELESSHELPER_EXAMPLES_DEPLOYQT)
set(__extra_flags) set(__extra_flags)
if(FRAMELESSHELPER_NO_INSTALL) if(FRAMELESSHELPER_NO_INSTALL)
set(__extra_flags NO_INSTALL) set(__extra_flags NO_INSTALL)
endif() endif()
deploy_qt_runtime(TARGET OpenGLWidget ${__extra_flags}) deploy_qt_runtime(TARGET ${PROJECT_NAME} ${__extra_flags})
endif() endif()

View File

@ -22,10 +22,28 @@
SOFTWARE. SOFTWARE.
]] ]]
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Quick) cmake_minimum_required(VERSION 3.20)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Quick)
set(SOURCES project(FramelessHelperDemo-Quick VERSION 1.0)
include(../../cmake/utils.cmake)
setup_project(
QT_PROJECT
LANGUAGES CXX RC
NO_WARNING
ENABLE_LTO
)
if(FRAMELESSHELPER_EXAMPLES_STANDALONE)
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Quick)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Quick)
find_package(FramelessHelper REQUIRED COMPONENTS Core Quick)
endif()
add_executable(${PROJECT_NAME})
target_sources(${PROJECT_NAME} PRIVATE
../shared/log.h ../shared/log.h
../shared/log.cpp ../shared/log.cpp
../shared/settings.h ../shared/settings.h
@ -35,20 +53,37 @@ set(SOURCES
quicksettings.cpp quicksettings.cpp
) )
if(QT_VERSION VERSION_LESS "6.2")
list(APPEND SOURCES resources.qrc)
endif()
if(WIN32) if(WIN32)
enable_language(RC) set(__rc_path "${PROJECT_BINARY_DIR}/${PROJECT_NAME}.rc")
list(APPEND SOURCES generate_win32_rc_file(
../shared/example.rc PATH "${__rc_path}"
../shared/example.manifest VERSION "${PROJECT_VERSION}"
COMPANY "wangwenx190"
DESCRIPTION "FramelessHelper Demo Application: Quick"
COPYRIGHT "MIT License"
PRODUCT "FramelessHelper Demo"
ICONS "../shared/example.ico"
)
set(__manifest_path "${PROJECT_BINARY_DIR}/${PROJECT_NAME}.manifest")
generate_win32_manifest_file(
PATH "${__manifest_path}"
ID "org.wangwenx190.demo.Quick"
VERSION "${PROJECT_VERSION}"
VISTA_COMPAT
WIN7_COMPAT
WIN8_COMPAT
WIN8_1_COMPAT
WIN10_COMPAT
WIN11_COMPAT
XAML_ISLANDS_COMPAT
UTF8_CODEPAGE
)
target_sources(${PROJECT_NAME} PRIVATE
"${__rc_path}"
"${__manifest_path}"
) )
endif() endif()
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"
@ -58,11 +93,9 @@ if(QT_VERSION VERSION_GREATER_EQUAL "6.2")
set_source_files_properties(${QML_SOURCES} set_source_files_properties(${QML_SOURCES}
PROPERTIES QT_DISCARD_FILE_CONTENTS TRUE PROPERTIES QT_DISCARD_FILE_CONTENTS TRUE
) )
qt_add_qml_module(Quick qt_add_qml_module(${PROJECT_NAME}
URI Demo URI Demo
VERSION 1.0 VERSION 1.0
IMPORT_PATH "${PROJECT_BINARY_DIR}/imports"
OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/imports/Demo"
RESOURCE_PREFIX "/" RESOURCE_PREFIX "/"
NO_RESOURCE_TARGET_PATH NO_RESOURCE_TARGET_PATH
IMPORTS IMPORTS
@ -72,57 +105,37 @@ if(QT_VERSION VERSION_GREATER_EQUAL "6.2")
QML_FILES ${QML_SOURCES} QML_FILES ${QML_SOURCES}
#ENABLE_TYPE_COMPILER #ENABLE_TYPE_COMPILER
) )
qt_add_resources(Quick resources qt_add_resources(${PROJECT_NAME} resources
PREFIX PREFIX
"/" "/"
FILES FILES
"images/microsoft.svg" "images/microsoft.svg"
) )
else()
target_sources(${PROJECT_NAME} PRIVATE resources.qrc)
endif() endif()
target_link_libraries(Quick PRIVATE target_link_libraries(${PROJECT_NAME} PRIVATE
Qt${QT_VERSION_MAJOR}::Quick
Qt${QT_VERSION_MAJOR}::QuickPrivate Qt${QT_VERSION_MAJOR}::QuickPrivate
FramelessHelper::Core
FramelessHelper::Quick FramelessHelper::Quick
) )
target_compile_definitions(Quick PRIVATE setup_gui_app(
$<$<OR:$<CONFIG:Debug>,$<CONFIG:RelWithDebInfo>>:QT_QML_DEBUG> TARGETS ${PROJECT_NAME}
BUNDLE_ID "org.wangwenx190.demo.Quick"
BUNDLE_VERSION "1.0.0"
BUNDLE_VERSION_SHORT "1.0"
) )
include(../../cmake/utils.cmake)
setup_gui_app(
TARGETS Quick
BUNDLE_ID org.wangwenx190.Quick
BUNDLE_VERSION 1.0.0
BUNDLE_VERSION_SHORT 1.0
)
set(__extra_flags)
if(NOT FRAMELESSHELPER_NO_PERMISSIVE_CHECKS)
list(APPEND __extra_flags PERMISSIVE)
endif()
if(FRAMELESSHELPER_ENABLE_SPECTRE)
list(APPEND __extra_flags SPECTRE)
endif()
if(FRAMELESSHELPER_ENABLE_EHCONTGUARD)
list(APPEND __extra_flags EHCONTGUARD)
endif()
if(FRAMELESSHELPER_ENABLE_INTELCET)
list(APPEND __extra_flags INTELCET)
endif()
if(FRAMELESSHELPER_ENABLE_INTELJCC)
list(APPEND __extra_flags INTELJCC)
endif()
if(FRAMELESSHELPER_ENABLE_CFGUARD)
list(APPEND __extra_flags CFGUARD)
endif()
setup_compile_params(TARGETS Quick ${__extra_flags})
if(FRAMELESSHELPER_EXAMPLES_DEPLOYQT) if(FRAMELESSHELPER_EXAMPLES_DEPLOYQT)
set(__extra_flags) set(__extra_flags)
if(FRAMELESSHELPER_NO_INSTALL) if(FRAMELESSHELPER_NO_INSTALL)
set(__extra_flags NO_INSTALL) set(__extra_flags NO_INSTALL)
endif() endif()
deploy_qt_runtime( deploy_qt_runtime(
TARGET Quick TARGET ${PROJECT_NAME}
QML_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/qml" QML_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/qml"
${__extra_flags} ${__extra_flags}
) )

View File

@ -1,7 +1,6 @@
TEMPLATE = app TEMPLATE = app
TARGET = Quick TARGET = FramelessHelperDemo-Quick
QT += qml quick quickcontrols2 QT += qml quick quickcontrols2
win32: CONFIG -= embed_manifest_exe
DEFINES += QUICK_USE_QMAKE DEFINES += QUICK_USE_QMAKE
HEADERS += \ HEADERS += \
../shared/log.h \ ../shared/log.h \
@ -13,6 +12,5 @@ SOURCES += \
quicksettings.cpp \ quicksettings.cpp \
main.cpp main.cpp
RESOURCES += resources.qrc RESOURCES += resources.qrc
win32: RC_FILE = ../shared/example.rc
include(../../qmake/core.pri) include(../../qmake/core.pri)
include(../../qmake/quick.pri) include(../../qmake/quick.pri)

View File

@ -23,6 +23,6 @@
@echo off @echo off
setlocal setlocal
set QSG_RHI_BACKEND=d3d11 set QSG_RHI_BACKEND=d3d11
"%~dp0Quick.exe" "%~dp0FramelessHelperDemo-Quick.exe"
endlocal endlocal
exit /b 0 exit /b 0

View File

@ -0,0 +1,28 @@
:: 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.
@echo off
setlocal
set QSG_RHI_BACKEND=d3d12
"%~dp0FramelessHelperDemo-Quick.exe"
endlocal
exit /b 0

View File

@ -23,6 +23,6 @@
@echo off @echo off
setlocal setlocal
set QSG_RHI_BACKEND=opengl set QSG_RHI_BACKEND=opengl
"%~dp0Quick.exe" "%~dp0FramelessHelperDemo-Quick.exe"
endlocal endlocal
exit /b 0 exit /b 0

View File

@ -23,6 +23,6 @@
@echo off @echo off
setlocal setlocal
set QSG_RHI_BACKEND=vulkan set QSG_RHI_BACKEND=vulkan
"%~dp0Quick.exe" "%~dp0FramelessHelperDemo-Quick.exe"
endlocal endlocal
exit /b 0 exit /b 0

View File

@ -1,87 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
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.
-->
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity type="win32" name="org.wangwenx190.framelesshelper.demo" version="1.0.0.0"/>
<description>FramelessHelper Demo</description>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*"/>
</dependentAssembly>
</dependency>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- Windows 10 Version 1809 (October 2018 Update) -->
<maxversiontested Id="10.0.17763.0"/>
<!-- Windows 10 Version 1903 (May 2019 Update) -->
<maxversiontested Id="10.0.18362.0"/>
<!-- Windows 10 Version 1909 (November 2019 Update) -->
<maxversiontested Id="10.0.18363.0"/>
<!-- Windows 10 Version 2004 (May 2020 Update) -->
<maxversiontested Id="10.0.19041.0"/>
<!-- Windows 10 Version 20H2 (October 2020 Update) -->
<maxversiontested Id="10.0.19042.0"/>
<!-- Windows 10 Version 21H1 (May 2021 Update) -->
<maxversiontested Id="10.0.19043.0"/>
<!-- Windows 10 Version 21H2 (November 2021 Update) -->
<maxversiontested Id="10.0.19044.0"/>
<!-- Windows 10 Version 22H2 (October 2022 Update) -->
<maxversiontested Id="10.0.19045.0"/>
<!-- Windows 11 Version 21H2 -->
<maxversiontested Id="10.0.22000.0"/>
<!-- Windows 11 Version 22H2 (October 2022 Update) -->
<maxversiontested Id="10.0.22621.0"/>
<!-- Windows Vista and Windows Server 2008 -->
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
<!-- Windows 7 and Windows Server 2008 R2 -->
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
<!-- Windows 8 and Windows Server 2012 -->
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
<!-- Windows 8.1 and Windows Server 2012 R2 -->
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
<!-- Windows 10 and Windows 11 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
</application>
</compatibility>
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">True/PM</dpiAware>
<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2, PerMonitor</dpiAwareness>
<printerDriverIsolation xmlns="http://schemas.microsoft.com/SMI/2011/WindowsSettings">True</printerDriverIsolation>
<disableWindowFiltering xmlns="http://schemas.microsoft.com/SMI/2011/WindowsSettings">True</disableWindowFiltering>
<longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">True</longPathAware>
<activeCodePage xmlns="http://schemas.microsoft.com/SMI/2019/WindowsSettings">UTF-8</activeCodePage>
<heapType xmlns="http://schemas.microsoft.com/SMI/2020/WindowsSettings">SegmentHeap</heapType>
</windowsSettings>
</application>
</assembly>

View File

@ -1,70 +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.
*/
#include <windows.h>
IDI_ICON1 ICON "example.ico"
#if 0
#if (defined(WIDGET_USE_QMAKE) || defined(QUICK_USE_QMAKE))
#ifndef CREATEPROCESS_MANIFEST_RESOURCE_ID
#define CREATEPROCESS_MANIFEST_RESOURCE_ID 1
#endif
#ifndef RT_MANIFEST
#define RT_MANIFEST 24
#endif
CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "example.manifest"
#endif
#endif
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,0,0,0
PRODUCTVERSION 1,0,0,0
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS VS_FF_DEBUG
#else
FILEFLAGS 0x0L
#endif
FILEOS VOS_NT_WINDOWS32
FILETYPE VFT_APP
FILESUBTYPE VFT2_UNKNOWN
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "CompanyName", "wangwenx190"
VALUE "FileDescription", "FramelessHelper Demo Application"
VALUE "FileVersion", "1.0.0.0"
VALUE "LegalCopyright", "MIT License"
VALUE "ProductName", "Demo"
VALUE "ProductVersion", "1.0.0.0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1200
END
END

View File

@ -22,7 +22,28 @@
SOFTWARE. SOFTWARE.
]] ]]
set(SOURCES cmake_minimum_required(VERSION 3.20)
project(FramelessHelperDemo-Widget VERSION 1.0)
include(../../cmake/utils.cmake)
setup_project(
QT_PROJECT
LANGUAGES CXX RC
NO_WARNING
ENABLE_LTO
)
if(FRAMELESSHELPER_EXAMPLES_STANDALONE)
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)
find_package(FramelessHelper REQUIRED COMPONENTS Core Widgets)
endif()
add_executable(${PROJECT_NAME})
target_sources(${PROJECT_NAME} PRIVATE
../shared/log.h ../shared/log.h
../shared/log.cpp ../shared/log.cpp
../shared/settings.h ../shared/settings.h
@ -33,51 +54,53 @@ set(SOURCES
) )
if(WIN32) if(WIN32)
enable_language(RC) set(__rc_path "${PROJECT_BINARY_DIR}/${PROJECT_NAME}.rc")
list(APPEND SOURCES generate_win32_rc_file(
../shared/example.rc PATH "${__rc_path}"
../shared/example.manifest VERSION "${PROJECT_VERSION}"
COMPANY "wangwenx190"
DESCRIPTION "FramelessHelper Demo Application: Widget"
COPYRIGHT "MIT License"
PRODUCT "FramelessHelper Demo"
ICONS "../shared/example.ico"
)
set(__manifest_path "${PROJECT_BINARY_DIR}/${PROJECT_NAME}.manifest")
generate_win32_manifest_file(
PATH "${__manifest_path}"
ID "org.wangwenx190.demo.Widget"
VERSION "${PROJECT_VERSION}"
VISTA_COMPAT
WIN7_COMPAT
WIN8_COMPAT
WIN8_1_COMPAT
WIN10_COMPAT
WIN11_COMPAT
XAML_ISLANDS_COMPAT
UTF8_CODEPAGE
)
target_sources(${PROJECT_NAME} PRIVATE
"${__rc_path}"
"${__manifest_path}"
) )
endif() endif()
add_executable(Widget ${SOURCES}) target_link_libraries(${PROJECT_NAME} PRIVATE
target_link_libraries(Widget PRIVATE
Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Widgets
FramelessHelper::Core
FramelessHelper::Widgets FramelessHelper::Widgets
) )
include(../../cmake/utils.cmake)
setup_gui_app( setup_gui_app(
TARGETS Widget TARGETS ${PROJECT_NAME}
BUNDLE_ID org.wangwenx190.Widget BUNDLE_ID "org.wangwenx190.demo.Widget"
BUNDLE_VERSION 1.0.0 BUNDLE_VERSION "1.0.0"
BUNDLE_VERSION_SHORT 1.0 BUNDLE_VERSION_SHORT "1.0"
) )
set(__extra_flags)
if(NOT FRAMELESSHELPER_NO_PERMISSIVE_CHECKS)
list(APPEND __extra_flags PERMISSIVE)
endif()
if(FRAMELESSHELPER_ENABLE_SPECTRE)
list(APPEND __extra_flags SPECTRE)
endif()
if(FRAMELESSHELPER_ENABLE_EHCONTGUARD)
list(APPEND __extra_flags EHCONTGUARD)
endif()
if(FRAMELESSHELPER_ENABLE_INTELCET)
list(APPEND __extra_flags INTELCET)
endif()
if(FRAMELESSHELPER_ENABLE_INTELJCC)
list(APPEND __extra_flags INTELJCC)
endif()
if(FRAMELESSHELPER_ENABLE_CFGUARD)
list(APPEND __extra_flags CFGUARD)
endif()
setup_compile_params(TARGETS Widget ${__extra_flags})
if(FRAMELESSHELPER_EXAMPLES_DEPLOYQT) if(FRAMELESSHELPER_EXAMPLES_DEPLOYQT)
set(__extra_flags) set(__extra_flags)
if(FRAMELESSHELPER_NO_INSTALL) if(FRAMELESSHELPER_NO_INSTALL)
set(__extra_flags NO_INSTALL) set(__extra_flags NO_INSTALL)
endif() endif()
deploy_qt_runtime(TARGET Widget ${__extra_flags}) deploy_qt_runtime(TARGET ${PROJECT_NAME} ${__extra_flags})
endif() endif()

View File

@ -1,8 +1,6 @@
TEMPLATE = app TEMPLATE = app
TARGET = Widget TARGET = FramelessHelperDemo-Widget
QT += widgets QT += widgets
win32: CONFIG -= embed_manifest_exe
DEFINES += WIDGET_USE_QMAKE
HEADERS += \ HEADERS += \
../shared/log.h \ ../shared/log.h \
../shared/settings.h \ ../shared/settings.h \
@ -12,6 +10,5 @@ SOURCES += \
../shared/settings.cpp \ ../shared/settings.cpp \
widget.cpp \ widget.cpp \
main.cpp main.cpp
win32: RC_FILE = ../shared/example.rc
include(../../qmake/core.pri) include(../../qmake/core.pri)
include(../../qmake/widgets.pri) include(../../qmake/widgets.pri)

View File

@ -193,7 +193,9 @@ QT_END_NAMESPACE
#endif #endif
#ifndef FRAMELESSHELPER_CORE_NO_BUNDLE_RESOURCE #ifndef FRAMELESSHELPER_CORE_NO_BUNDLE_RESOURCE
// Call this function in your main() function if you built FramelessHelper as a static library. // Call this function in your main() function if you are using FramelessHelper as a static library,
// it can make sure the resources bundled in the static library are correctly initialized.
// NOTE: This function is intentionally not inside any namespaces.
FRAMELESSHELPER_CORE_API void framelesshelpercore_initResource(); FRAMELESSHELPER_CORE_API void framelesshelpercore_initResource();
#endif // FRAMELESSHELPER_CORE_NO_BUNDLE_RESOURCE #endif // FRAMELESSHELPER_CORE_NO_BUNDLE_RESOURCE

View File

@ -22,6 +22,8 @@
SOFTWARE. SOFTWARE.
]] ]]
include(GNUInstallDirs)
if(UNIX AND NOT APPLE) if(UNIX AND NOT APPLE)
if(FRAMELESSHELPER_NO_PRIVATE) if(FRAMELESSHELPER_NO_PRIVATE)
# Qt X11Extras is only available in Qt5. # Qt X11Extras is only available in Qt5.
@ -136,7 +138,7 @@ elseif(UNIX)
endif() endif()
if(WIN32 AND NOT FRAMELESSHELPER_BUILD_STATIC) if(WIN32 AND NOT FRAMELESSHELPER_BUILD_STATIC)
set(__rc_path "${CMAKE_CURRENT_BINARY_DIR}/framelesshelpercore.rc") set(__rc_path "${CMAKE_CURRENT_BINARY_DIR}/${SUB_PROJ_NAME}.rc")
generate_win32_rc_file( generate_win32_rc_file(
PATH "${__rc_path}" PATH "${__rc_path}"
VERSION "${PROJECT_VERSION}" VERSION "${PROJECT_VERSION}"
@ -155,15 +157,12 @@ set(ALL_SOURCES ${PUBLIC_HEADERS} ${PRIVATE_HEADERS} ${SOURCES})
if(FRAMELESSHELPER_BUILD_STATIC) if(FRAMELESSHELPER_BUILD_STATIC)
set(SUB_MOD_LIB_TYPE "STATIC") set(SUB_MOD_LIB_TYPE "STATIC")
set(SUB_MOD_LIB_DIR "lib") set(SUB_MOD_LIB_DIR "${CMAKE_INSTALL_LIBDIR}")
add_library(${SUB_PROJ_NAME} STATIC ${ALL_SOURCES})
add_library(${SUB_PROJ_NAME}_static ALIAS ${SUB_PROJ_NAME})
else() else()
set(SUB_MOD_LIB_TYPE "SHARED") set(SUB_MOD_LIB_TYPE "SHARED")
set(SUB_MOD_LIB_DIR "bin") set(SUB_MOD_LIB_DIR "${CMAKE_INSTALL_BINDIR}")
add_library(${SUB_PROJ_NAME} SHARED ${ALL_SOURCES})
add_library(${SUB_PROJ_NAME}_shared ALIAS ${SUB_PROJ_NAME})
endif() 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_PROJ_NAME} ALIAS ${SUB_PROJ_NAME})
add_library(${PROJECT_NAME}::${SUB_MOD_NAME} ALIAS ${SUB_PROJ_NAME}) add_library(${PROJECT_NAME}::${SUB_MOD_NAME} ALIAS ${SUB_PROJ_NAME})
@ -172,6 +171,8 @@ set_target_properties(${SUB_PROJ_NAME} PROPERTIES
SOVERSION "${PROJECT_VERSION_MAJOR}" SOVERSION "${PROJECT_VERSION_MAJOR}"
) )
set(SUB_MOD_TARGETS ${SUB_PROJ_NAME})
set(__prefix "") set(__prefix "")
if(NOT WIN32) if(NOT WIN32)
set(__prefix "lib") set(__prefix "lib")
@ -212,11 +213,14 @@ if(NOT FRAMELESSHELPER_NO_BUNDLE_RESOURCE)
"resources/images/noise.png" "resources/images/noise.png"
OUTPUT_TARGETS __qrc_targets OUTPUT_TARGETS __qrc_targets
) )
if(FRAMELESSHELPER_BUILD_STATIC AND __qrc_targets) if(__qrc_targets)
foreach(__target ${__qrc_targets}) foreach(__target ${__qrc_targets})
target_sources(${SUB_PROJ_NAME} PRIVATE list(APPEND SUB_MOD_TARGETS ${__target})
$<TARGET_OBJECTS:${__target}> if(FRAMELESSHELPER_BUILD_STATIC)
) target_sources(${SUB_PROJ_NAME} PRIVATE
$<TARGET_OBJECTS:${__target}>
)
endif()
endforeach() endforeach()
endif() endif()
else() else()
@ -340,7 +344,6 @@ if(FRAMELESSHELPER_ENABLE_CFGUARD)
endif() endif()
setup_compile_params(TARGETS ${SUB_PROJ_NAME} ${__extra_flags}) setup_compile_params(TARGETS ${SUB_PROJ_NAME} ${__extra_flags})
if(NOT FRAMELESSHELPER_NO_INSTALL) if(NOT FRAMELESSHELPER_NO_INSTALL)
include(GNUInstallDirs)
set(__cmake_dir "${CMAKE_CURRENT_BINARY_DIR}/cmake") set(__cmake_dir "${CMAKE_CURRENT_BINARY_DIR}/cmake")
set(__config_file "${__cmake_dir}/${SUB_PROJ_NAME}Config.cmake") set(__config_file "${__cmake_dir}/${SUB_PROJ_NAME}Config.cmake")
configure_file(../../FramelessHelperModuleConfig.cmake.in ${__config_file} @ONLY) configure_file(../../FramelessHelperModuleConfig.cmake.in ${__config_file} @ONLY)
@ -360,7 +363,7 @@ if(NOT FRAMELESSHELPER_NO_INSTALL)
DESTINATION "${__inc_dir}/private" DESTINATION "${__inc_dir}/private"
) )
install( install(
TARGETS ${SUB_PROJ_NAME} TARGETS ${SUB_MOD_TARGETS}
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"

View File

@ -22,6 +22,8 @@
SOFTWARE. SOFTWARE.
]] ]]
include(GNUInstallDirs)
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS QuickTemplates2 QuickControls2) find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS QuickTemplates2 QuickControls2)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS QuickTemplates2 QuickControls2) find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS QuickTemplates2 QuickControls2)
@ -82,7 +84,7 @@ set(SOURCES
) )
if(WIN32 AND NOT FRAMELESSHELPER_BUILD_STATIC) if(WIN32 AND NOT FRAMELESSHELPER_BUILD_STATIC)
set(__rc_path "${CMAKE_CURRENT_BINARY_DIR}/framelesshelperquick.rc") set(__rc_path "${CMAKE_CURRENT_BINARY_DIR}/${SUB_PROJ_NAME}.rc")
generate_win32_rc_file( generate_win32_rc_file(
PATH "${__rc_path}" PATH "${__rc_path}"
VERSION "${PROJECT_VERSION}" VERSION "${PROJECT_VERSION}"
@ -101,15 +103,12 @@ set(ALL_SOURCES ${PUBLIC_HEADERS} ${PRIVATE_HEADERS} ${SOURCES})
if(FRAMELESSHELPER_BUILD_STATIC) if(FRAMELESSHELPER_BUILD_STATIC)
set(SUB_MOD_LIB_TYPE "STATIC") set(SUB_MOD_LIB_TYPE "STATIC")
set(SUB_MOD_LIB_DIR "lib") set(SUB_MOD_LIB_DIR "${CMAKE_INSTALL_LIBDIR}")
add_library(${SUB_PROJ_NAME} STATIC ${ALL_SOURCES})
add_library(${SUB_PROJ_NAME}_static ALIAS ${SUB_PROJ_NAME})
else() else()
set(SUB_MOD_LIB_TYPE "SHARED") set(SUB_MOD_LIB_TYPE "SHARED")
set(SUB_MOD_LIB_DIR "bin") set(SUB_MOD_LIB_DIR "${CMAKE_INSTALL_BINDIR}")
add_library(${SUB_PROJ_NAME} SHARED ${ALL_SOURCES})
add_library(${SUB_PROJ_NAME}_shared ALIAS ${SUB_PROJ_NAME})
endif() 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_PROJ_NAME} ALIAS ${SUB_PROJ_NAME})
add_library(${PROJECT_NAME}::${SUB_MOD_NAME} ALIAS ${SUB_PROJ_NAME}) add_library(${PROJECT_NAME}::${SUB_MOD_NAME} ALIAS ${SUB_PROJ_NAME})
@ -118,6 +117,8 @@ set_target_properties(${SUB_PROJ_NAME} PROPERTIES
SOVERSION "${PROJECT_VERSION_MAJOR}" SOVERSION "${PROJECT_VERSION_MAJOR}"
) )
set(SUB_MOD_TARGETS ${SUB_PROJ_NAME})
set(__prefix "") set(__prefix "")
if(NOT WIN32) if(NOT WIN32)
set(__prefix "lib") set(__prefix "lib")
@ -162,17 +163,20 @@ if(QT_VERSION VERSION_GREATER_EQUAL "6.2")
OUTPUT_DIRECTORY "${__import_dir}" OUTPUT_DIRECTORY "${__import_dir}"
RESOURCE_PREFIX "/" RESOURCE_PREFIX "/"
#NO_RESOURCE_TARGET_PATH # Can't be used for non-executables. #NO_RESOURCE_TARGET_PATH # Can't be used for non-executables.
OUTPUT_TARGETS __qrc_targets OUTPUT_TARGETS __qml_targets
IMPORTS IMPORTS
QtQml/auto QtQml/auto
QtQuick/auto QtQuick/auto
QtQuick.Controls.Basic/auto QtQuick.Controls.Basic/auto
) )
if(FRAMELESSHELPER_BUILD_STATIC AND __qrc_targets) if(__qml_targets)
foreach(__target ${__qrc_targets}) foreach(__target ${__qml_targets})
target_sources(${SUB_PROJ_NAME} PRIVATE list(APPEND SUB_MOD_TARGETS ${__target})
$<TARGET_OBJECTS:${__target}> if(FRAMELESSHELPER_BUILD_STATIC)
) target_sources(${SUB_PROJ_NAME} PRIVATE
$<TARGET_OBJECTS:${__target}>
)
endif()
endforeach() endforeach()
endif() endif()
if(NOT FRAMELESSHELPER_NO_INSTALL) if(NOT FRAMELESSHELPER_NO_INSTALL)
@ -295,7 +299,6 @@ if(FRAMELESSHELPER_ENABLE_CFGUARD)
endif() endif()
setup_compile_params(TARGETS ${SUB_PROJ_NAME} ${__extra_flags}) setup_compile_params(TARGETS ${SUB_PROJ_NAME} ${__extra_flags})
if(NOT FRAMELESSHELPER_NO_INSTALL) if(NOT FRAMELESSHELPER_NO_INSTALL)
include(GNUInstallDirs)
set(__cmake_dir "${CMAKE_CURRENT_BINARY_DIR}/cmake") set(__cmake_dir "${CMAKE_CURRENT_BINARY_DIR}/cmake")
set(__config_file "${__cmake_dir}/${SUB_PROJ_NAME}Config.cmake") set(__config_file "${__cmake_dir}/${SUB_PROJ_NAME}Config.cmake")
configure_file(../../FramelessHelperModuleConfig.cmake.in ${__config_file} @ONLY) configure_file(../../FramelessHelperModuleConfig.cmake.in ${__config_file} @ONLY)
@ -315,7 +318,7 @@ if(NOT FRAMELESSHELPER_NO_INSTALL)
DESTINATION "${__inc_dir}/private" DESTINATION "${__inc_dir}/private"
) )
install( install(
TARGETS ${SUB_PROJ_NAME} TARGETS ${SUB_MOD_TARGETS}
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"

View File

@ -22,6 +22,8 @@
SOFTWARE. SOFTWARE.
]] ]]
include(GNUInstallDirs)
set(SUB_MOD_NAME Widgets) set(SUB_MOD_NAME Widgets)
set(SUB_PROJ_NAME ${PROJECT_NAME}${SUB_MOD_NAME}) set(SUB_PROJ_NAME ${PROJECT_NAME}${SUB_MOD_NAME})
set(SUB_PROJ_PATH ${PROJECT_NAME}/${SUB_MOD_NAME}) set(SUB_PROJ_PATH ${PROJECT_NAME}/${SUB_MOD_NAME})
@ -70,7 +72,7 @@ set(SOURCES
) )
if(WIN32 AND NOT FRAMELESSHELPER_BUILD_STATIC) if(WIN32 AND NOT FRAMELESSHELPER_BUILD_STATIC)
set(__rc_path "${CMAKE_CURRENT_BINARY_DIR}/framelesshelperwidgets.rc") set(__rc_path "${CMAKE_CURRENT_BINARY_DIR}/${SUB_PROJ_NAME}.rc")
generate_win32_rc_file( generate_win32_rc_file(
PATH "${__rc_path}" PATH "${__rc_path}"
VERSION "${PROJECT_VERSION}" VERSION "${PROJECT_VERSION}"
@ -89,15 +91,12 @@ set(ALL_SOURCES ${PUBLIC_HEADERS} ${PRIVATE_HEADERS} ${SOURCES})
if(FRAMELESSHELPER_BUILD_STATIC) if(FRAMELESSHELPER_BUILD_STATIC)
set(SUB_MOD_LIB_TYPE "STATIC") set(SUB_MOD_LIB_TYPE "STATIC")
set(SUB_MOD_LIB_DIR "lib") set(SUB_MOD_LIB_DIR "${CMAKE_INSTALL_LIBDIR}")
add_library(${SUB_PROJ_NAME} STATIC ${ALL_SOURCES})
add_library(${SUB_PROJ_NAME}_static ALIAS ${SUB_PROJ_NAME})
else() else()
set(SUB_MOD_LIB_TYPE "SHARED") set(SUB_MOD_LIB_TYPE "SHARED")
set(SUB_MOD_LIB_DIR "bin") set(SUB_MOD_LIB_DIR "${CMAKE_INSTALL_BINDIR}")
add_library(${SUB_PROJ_NAME} SHARED ${ALL_SOURCES})
add_library(${SUB_PROJ_NAME}_shared ALIAS ${SUB_PROJ_NAME})
endif() 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_PROJ_NAME} ALIAS ${SUB_PROJ_NAME})
add_library(${PROJECT_NAME}::${SUB_MOD_NAME} ALIAS ${SUB_PROJ_NAME}) add_library(${PROJECT_NAME}::${SUB_MOD_NAME} ALIAS ${SUB_PROJ_NAME})
@ -216,7 +215,6 @@ if(FRAMELESSHELPER_ENABLE_CFGUARD)
endif() endif()
setup_compile_params(TARGETS ${SUB_PROJ_NAME} ${__extra_flags}) setup_compile_params(TARGETS ${SUB_PROJ_NAME} ${__extra_flags})
if(NOT FRAMELESSHELPER_NO_INSTALL) if(NOT FRAMELESSHELPER_NO_INSTALL)
include(GNUInstallDirs)
set(__cmake_dir "${CMAKE_CURRENT_BINARY_DIR}/cmake") set(__cmake_dir "${CMAKE_CURRENT_BINARY_DIR}/cmake")
set(__config_file "${__cmake_dir}/${SUB_PROJ_NAME}Config.cmake") set(__config_file "${__cmake_dir}/${SUB_PROJ_NAME}Config.cmake")
configure_file(../../FramelessHelperModuleConfig.cmake.in ${__config_file} @ONLY) configure_file(../../FramelessHelperModuleConfig.cmake.in ${__config_file} @ONLY)