windows-deployqt.cmake 4.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. # windows-deployqt.cmake
  2. # Windows 平台 windeployqt 自动化模块
  3. # 在对项目进行构建时,是否需要配置 deployqt 来为项目进行构建部署设计
  4. # 1. 如果需要进行 windeployqt,需要提供此 WINDOWS_DEPLOY_QT 开关
  5. # 2. 默认应用构建的内容将随附在此处
  6. # 3. 预先设置一个默认的 Windows Qt 目录变量
  7. set(WINDOWS_QT_DIR "")
  8. option(WINDOWS_DEPLOY_QT "为 Windows 中构建的应用进行 windeployqt" OFF)
  9. option(WINDOWS_DEPLOY_QT5 "为 Windows 中构建的 QT5 应用进行 windeployqt" OFF)
  10. option(WINDOWS_DEPLOY_QT6 "为 Windows 中构建的 QT6 应用进行 windeployqt" OFF)
  11. if(WINDOWS_DEPLOY_QT)
  12. if(WINDOWS_DEPLOY_QT5)
  13. # 当使用 WINDOWS_DEPLOY_QT5 配方时,将使用来源于 Qt5 中提供的路径
  14. set(WINDOWS_QT_DIR "${Qt5_DIR}")
  15. elseif(WINDOWS_DEPLOY_QT6)
  16. # 当使用 WINDOWS_DEPLOY_QT6 配方时,将使用来源于 Qt6 中提供的路径
  17. set(WINDOWS_QT_DIR "${Qt6_DIR}")
  18. endif()
  19. if (WINDOWS_DEPLOY_QT5 OR WINDOWS_DEPLOY_QT6)
  20. message(" -------- ${CMAKE_INSTALL_PREFIX} ---------- ")
  21. message("${WINDOWS_QT_DIR}/../../../bin/windeployqt")
  22. # install(TARGETS ${PROJECT_NAME}
  23. # DESTINATION ${CMAKE_BINARY_DIR}/windows-deployqt)
  24. # 配置一个自动运行 windeployqt 配方的位置
  25. # 当使用 Windows Deploy Qt 时,可执行程序与即将部署的应用运行时将在此处出现
  26. set(WINDOWS_APPLICATION_DEPLOY_PATH
  27. ${CMAKE_BINARY_DIR}/windows-deployqt/${PROJECT_NAME}.app/bin)
  28. # 在开启支持 windeployqt 配方后,这部分将会改变默认构建的目标的一些行为
  29. # 这是 windeployqt,所以,它应该是一个 WIN32 程序
  30. # 它的输出目录将定义为
  31. set_target_properties(${PROJECT_NAME}
  32. PROPERTIES
  33. # 这是一个 WIN32 程序,即可执行文件不再出现黑窗口,转而使用 WinMain(某种 Windows 内部特性)
  34. WIN32_EXECUTABLE true
  35. # 静态库生成目录
  36. # ARCHIVE_OUTPUT_DIRECTORY ""
  37. # 动态库生成目录
  38. # LIBRARY_OUTPUT_DIRECTORY ""
  39. # 可执行文件生成目录
  40. RUNTIME_OUTPUT_DIRECTORY ${WINDOWS_APPLICATION_DEPLOY_PATH})
  41. # 自动化构建 Windows Deploy Qt Application
  42. # 参考: windeployqt --qmldir <path-to-app-qml-files> <path-to-app-binary>
  43. add_custom_command(TARGET ${PROJECT_NAME}
  44. # 在构建之后计划进行执行以下命令
  45. POST_BUILD
  46. # 即将在构建目录中
  47. WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
  48. # 执行以下命令进行 windeployqt
  49. COMMAND ${WINDOWS_QT_DIR}/../../../bin/windeployqt
  50. #
  51. ${WINDOWS_APPLICATION_DEPLOY_PATH}/${PROJECT_NAME}.exe
  52. # 扫描QML-从目录开始导入。
  53. --qmlimport ${WINDOWS_QT_DIR}/../../../qml
  54. # 部署编译器运行时(仅限桌面)。
  55. --compiler-runtime
  56. # 详细级别(0-2)
  57. --verbose 2
  58. # 部署运行时使用指定的目录
  59. --dir ${WINDOWS_APPLICATION_DEPLOY_PATH}
  60. )
  61. # 此部分为创建一个 windows-deployqt 的虚拟目标,用于对执行安装后的应用进行 windeployqt
  62. # 手动化构建 Windows Deploy Qt Application
  63. # 参考: windeployqt --qmldir <path-to-app-qml-files> <path-to-app-binary>
  64. add_custom_target(windows-deployqt
  65. COMMAND ${WINDOWS_QT_DIR}/../../../bin/windeployqt
  66. #
  67. ${WINDOWS_APPLICATION_DEPLOY_PATH}/${PROJECT_NAME}.exe
  68. # 扫描QML-从目录开始导入。
  69. --qmlimport ${WINDOWS_QT_DIR}/../../../qml
  70. # 部署编译器运行时(仅限桌面)。
  71. --compiler-runtime
  72. # 详细级别(0-2)
  73. --verbose 2
  74. # 部署运行时使用指定的目录
  75. --dir ${CMAKE_INSTALL_PREFIX}/bin
  76. )
  77. endif (WINDOWS_DEPLOY_QT5 OR WINDOWS_DEPLOY_QT6)
  78. endif(WINDOWS_DEPLOY_QT)