FluentUI/.template/CMakeLists.txt.in
yxdy a44db97aa3
Some checks failed
Gallery App Build / Windows (push) Has been cancelled
Gallery App Build / macOS (push) Has been cancelled
Gallery App Build / Ubuntu (push) Has been cancelled
init
2025-02-12 10:31:20 +08:00

250 lines
10 KiB
CMake

cmake_minimum_required(VERSION 3.21)
project(@{application_name} VERSION 1.0.0)
set(CMAKE_AUTOMOC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(PROJECT_APP_NAME "@{application_name}")
set(PROJECT_COMPANY "ZhuZiChu")
set(PROJECT_COPYRIGHT "Copyright (c) 2024 ZhuZiChu's Lab. All rights reserved.")
set(PROJECT_DOMAIN "com.zhuzichu.cn.fluentui")
set(PROJECT_DESCRIPTION "A QML project showcasing Fluent UI components and styles inspired by Microsoft's Fluent Design System.")
if(WIN32)
set(APPLICATION_DIR_PATH ${CMAKE_CURRENT_BINARY_DIR})
set(APP_ICON "${CMAKE_CURRENT_SOURCE_DIR}/favicon/favicon.ico")
elseif(APPLE)
set(APPLICATION_DIR_PATH ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_APP_NAME}.app/Contents/MacOS)
set(APP_ICON "${CMAKE_CURRENT_SOURCE_DIR}/favicon/favicon.icns")
else()
set(APPLICATION_DIR_PATH ${CMAKE_CURRENT_BINARY_DIR})
set(APP_ICON "${CMAKE_CURRENT_SOURCE_DIR}/favicon/favicon.png")
endif()
set(VERSION_STR "${PROJECT_VERSION_MAJOR},${PROJECT_VERSION_MINOR},${PROJECT_VERSION_PATCH}")
add_definitions(-DAPP_VERSION=${VERSION_STR})
set(QML_IMPORT_PATH ${CMAKE_BINARY_DIR}/qt/qml CACHE STRING "" FORCE)
find_package(Qt6 COMPONENTS Quick REQUIRED)
set(QT_SDK_DIR "${Qt6_DIR}/../../..")
cmake_path(SET QT_SDK_DIR NORMALIZE ${QT_SDK_DIR})
set(QML_FILES
App.qml
MainWindow.qml
MainScreen.qml
)
set(QML_SINGLETONS
)
set(RESOURCES_FILES
logo.png
@{application_name}_zh_CN.qm
@{application_name}_en_US.qm
)
set(SOURCE_FILES
main.cpp
stdafx.h
AppInfo.h AppInfo.cpp
Log.h Log.cpp
)
set_source_files_properties(${QML_SINGLETONS} PROPERTIES QT_QML_SINGLETON_TYPE TRUE)
if (WIN32)
configure_file(.cmake/win_app.rc.in ${CMAKE_CURRENT_BINARY_DIR}/win_app.rc)
configure_file(.cmake/InstallerScript.iss.in ${CMAKE_SOURCE_DIR}/package/InstallerScript.iss)
set(APP_ICON_RESOURCE_WINDOWS ${CMAKE_CURRENT_BINARY_DIR}/win_app.rc)
qt_add_executable(${PROJECT_NAME} ${SOURCE_FILES} ${APP_ICON_RESOURCE_WINDOWS})
elseif(APPLE)
set(MACOSX_BUNDLE_GUI_IDENTIFIER ${PROJECT_DOMAIN})
set(MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION})
set(MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR})
set(MACOSX_BUNDLE_BUNDLE_NAME ${PROJECT_APP_NAME})
set(MACOSX_BUNDLE_COPYRIGHT ${PROJECT_COPYRIGHT})
set(MACOSX_BUNDLE_DEVELOPMENT_REGION "Chinese")
set(CMAKE_OSX_DEPLOYMENT_TARGET "11.0" CACHE STRING "Minimum OS X deployment version" FORCE)
set(MACOSX_BUNDLE_EXECUTABLE_NAME ${PROJECT_APP_NAME})
set(MACOSX_BUNDLE_ICON_FILE favicon)
configure_file(.cmake/MacOSXBundleInfo.plist.in ${CMAKE_CURRENT_BINARY_DIR}/Info.plist)
set_source_files_properties(${APP_ICON} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources")
qt_add_executable(${PROJECT_NAME} ${SOURCE_FILES} ${APP_ICON})
elseif(UNIX)
configure_file(.cmake/linux_control.in ${CMAKE_SOURCE_DIR}/package/DEBIAN/control)
configure_file(.cmake/linux_postinst.in ${CMAKE_SOURCE_DIR}/package/DEBIAN/postinst)
configure_file(.cmake/linux_postrm.in ${CMAKE_SOURCE_DIR}/package/DEBIAN/postrm)
configure_file(.cmake/linux.desktop.in ${CMAKE_SOURCE_DIR}/package/opt/${PROJECT_APP_NAME}/${PROJECT_APP_NAME}.desktop)
qt_add_executable(${PROJECT_NAME} ${SOURCE_FILES})
else()
qt_add_executable(${PROJECT_NAME} ${SOURCE_FILES})
endif()
qt_add_qml_module(${PROJECT_NAME}
URI "@{application_name}"
VERSION "1.0"
QML_FILES ${QML_FILES} ${QML_SINGLETONS}
RESOURCES ${RESOURCES_FILES}
RESOURCE_PREFIX /qt/qml
OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/qt/qml/@{application_name}
)
if (NOT CMAKE_SYSTEM_NAME STREQUAL "Emscripten")
find_program(QT_LUPDATE NAMES lupdate lupdate-qt6)
find_program(QT_LRELEASE NAMES lrelease lrelease-qt6)
file(GLOB TS_FILE_PATHS ${CMAKE_CURRENT_LIST_DIR}/ *.ts)
add_custom_target(${PROJECT_NAME}_translations
COMMAND ${QT_LUPDATE} ${CMAKE_CURRENT_LIST_DIR} -ts ${PROJECT_NAME}_en_US.ts WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
COMMAND ${QT_LUPDATE} ${CMAKE_CURRENT_LIST_DIR} -ts ${PROJECT_NAME}_zh_CN.ts WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
COMMAND ${QT_LRELEASE} ${PROJECT_NAME}_en_US.ts WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
COMMAND ${QT_LRELEASE} ${PROJECT_NAME}_zh_CN.ts WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
SOURCES ${TS_FILE_PATHS}
)
add_dependencies(${PROJECT_NAME} ${PROJECT_NAME}_translations)
endif()
target_link_libraries(
${PROJECT_NAME} PRIVATE
Qt6::Quick
FluentUI
FluentUIImpl
FluentUIControls
)
if (FLUENTUI_BUILD_STATIC_LIB)
target_link_libraries(
${PROJECT_NAME} PRIVATE
FluentUIplugin
FluentUIImplplugin
FluentUIControlsplugin
)
target_compile_definitions(${PROJECT_NAME} PRIVATE
FLUENTUI_BUILD_STATIC_LIB
)
endif()
target_compile_definitions(${PROJECT_NAME} PRIVATE
QT_MESSAGELOGCONTEXT
PROJECT_NAME="${PROJECT_NAME}"
PROJECT_APP_NAME="${PROJECT_APP_NAME}"
PROJECT_COMPANY="${PROJECT_COMPANY}"
PROJECT_DOMAIN="${PROJECT_DOMAIN}"
PROJECT_DESCRIPTION="${PROJECT_DESCRIPTION}"
PROJECT_VERSION="${PROJECT_VERSION}"
PROJECT_SOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}"
PROJECT_HOTLOAD_ENABLED="${HOTLOAD_ENABLED}"
)
target_include_directories(${PROJECT_NAME} PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/src
)
set_target_properties(${PROJECT_NAME} PROPERTIES
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_BINARY_DIR}/Info.plist
MACOSX_BUNDLE TRUE
WIN32_EXECUTABLE TRUE
OUTPUT_NAME ${PROJECT_APP_NAME}
)
target_compile_definitions(${PROJECT_NAME} PRIVATE $<$<OR:$<CONFIG:Debug>,$<CONFIG:RelWithDebInfo>>:QT_QML_DEBUG>)
set(DIST_PATH ${CMAKE_SOURCE_DIR}/dist)
file(WRITE ${CMAKE_BINARY_DIR}/remove_build_files.cmake
"file(GLOB_RECURSE REMOVE_FILES
\"${DIST_PATH}/*.qml\"
\"${DIST_PATH}/*.debug\"
\"${DIST_PATH}/*opengl32sw*\"
\"${DIST_PATH}/*dxcompiler*\"
\"${DIST_PATH}/*d3dcompiler_47*\"
\"${DIST_PATH}/*vc_redist*\"
\"${DIST_PATH}/*dxil*\"
\"${DIST_PATH}/*Qt6Pdf*\"
\"${DIST_PATH}/*Qt6VirtualKeyboard*\"
\"${DIST_PATH}/*Qt6QuickControls2ImagineStyleImpl*\"
\"${DIST_PATH}/*Qt6QuickControls2Universal*\"
\"${DIST_PATH}/*Qt6QuickControls2UniversalStyleImpl*\"
\"${DIST_PATH}/*Qt6QuickControls2WindowsStyleImpl*\"
\"${DIST_PATH}/*Qt6QuickControls2Fusion*\"
\"${DIST_PATH}/*Qt6QuickControls2FusionStyleImpl*\"
\"${DIST_PATH}/*Qt6QuickControls2Imagine*\"
\"${DIST_PATH}/*Qt6Quick3DUtils*\"
\"${DIST_PATH}/*Qt63DAnimation*\"
\"${DIST_PATH}/*Qt63DCore*\"
\"${DIST_PATH}/*Qt63DExtras*\"
\"${DIST_PATH}/*Qt63DInput*\"
\"${DIST_PATH}/*Qt63DLogic*\"
\"${DIST_PATH}/*Qt63DQuickScene2D*\"
\"${DIST_PATH}/*Qt63DRender*\"
)
file(REMOVE \${REMOVE_FILES})
"
)
if (CMAKE_BUILD_TYPE MATCHES "Release")
if(WIN32)
find_program(QT_DEPLOY NAMES windeployqt)
if (MSVC)
file(GLOB_RECURSE RUNTIME_FILE_PATHS ./runtime/msvc/*.dll)
elseif (MINGW)
file(GLOB_RECURSE RUNTIME_FILE_PATHS ./runtime/mingw/*.dll)
endif ()
add_custom_target(${PROJECT_NAME}_dist
COMMAND ${CMAKE_COMMAND} -E remove_directory ${DIST_PATH}
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_APP_NAME}.exe ${DIST_PATH}/${PROJECT_APP_NAME}.exe
COMMAND ${QT_DEPLOY} --qmldir=${CMAKE_SOURCE_DIR} --plugindir ${DIST_PATH}/plugins --no-translations --compiler-runtime ${DIST_PATH}/${PROJECT_APP_NAME}.exe
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_BINARY_DIR}/remove_build_files.cmake
COMMAND ${CMAKE_COMMAND} -E copy ${RUNTIME_FILE_PATHS} ${DIST_PATH}
COMMENT "Windows Deploying Qt Dependencies After Build........."
SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
endif()
if (APPLE)
find_program(QT_DEPLOY NAMES macdeployqt)
add_custom_target(${PROJECT_NAME}_dist
COMMAND ${CMAKE_COMMAND} -E remove_directory ${DIST_PATH}
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_APP_NAME}.app ${DIST_PATH}/${PROJECT_APP_NAME}.app
COMMAND ${QT_DEPLOY} ${DIST_PATH}/${PROJECT_APP_NAME}.app -qmldir=${CMAKE_SOURCE_DIR}
COMMAND find ${DIST_PATH}/${PROJECT_APP_NAME}.app -name "*.dSYM" | xargs rm -r
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_BINARY_DIR}/remove_build_files.cmake
COMMAND ${QT_DEPLOY} ${DIST_PATH}/${PROJECT_APP_NAME}.app -dmg
COMMENT "MacOs Deploying Qt Dependencies After Build........."
SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
endif()
if (LINUX)
set(LINUXDEPLOY_URL "https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage")
set(LINUXDEPLOY_DEST "${CMAKE_BINARY_DIR}/linuxdeploy")
if(NOT EXISTS ${LINUXDEPLOY_DEST})
file(DOWNLOAD ${LINUXDEPLOY_URL} ${LINUXDEPLOY_DEST} SHOW_PROGRESS)
if(UNIX)
execute_process(COMMAND chmod +x ${LINUXDEPLOY_DEST})
endif()
message(STATUS "Downloaded linuxdeploy to: ${LINUXDEPLOY_DEST}")
else()
message(STATUS "linuxdeploy already exists at: ${LINUXDEPLOY_DEST}")
endif()
find_program(QT_DEPLOY NAMES linuxdeploy PATHS ${CMAKE_BINARY_DIR})
add_custom_target(${PROJECT_NAME}_dist
COMMAND ${CMAKE_COMMAND} -E remove_directory ${DIST_PATH}
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_APP_NAME} ${DIST_PATH}/${PROJECT_APP_NAME}
COMMAND ${CMAKE_COMMAND} -E copy ${APP_ICON} ${DIST_PATH}/${PROJECT_APP_NAME}.png
COMMAND ${CMAKE_COMMAND} -E env PATH=${QT_SDK_DIR}/bin:$ENV{PATH} ${QT_DEPLOY} ${DIST_PATH}/${PROJECT_APP_NAME} -qmldir=${CMAKE_SOURCE_DIR} -unsupported-allow-new-glibc
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_BINARY_DIR}/remove_build_files.cmake
COMMAND ${CMAKE_COMMAND} -E copy_directory ${DIST_PATH} ${CMAKE_SOURCE_DIR}/package/opt/${PROJECT_APP_NAME}
COMMAND chmod 775 ${CMAKE_SOURCE_DIR}/package/DEBIAN/postinst
COMMAND chmod 775 ${CMAKE_SOURCE_DIR}/package/DEBIAN/postrm
COMMENT "LINUX Deploying Qt Dependencies After Build........."
SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
endif()
endif()