DeployQt.cmake 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. find_package( Qt5
  2. COMPONENTS
  3. Core
  4. REQUIRED
  5. )
  6. get_target_property( qmake_location Qt5::qmake IMPORTED_LOCATION )
  7. get_filename_component( qt5_bin_dir ${qmake_location} DIRECTORY )
  8. if ( APPLE )
  9. find_program( mac_deploy_qt macdeployqt HINTS "${qt5_bin_dir}" )
  10. if( NOT EXISTS "${mac_deploy_qt}" )
  11. message( FATAL_ERROR "macdeployqt not found in ${qt5_bin_dir}" )
  12. endif()
  13. elseif( WIN32 )
  14. find_program( win_deploy_qt windeployqt HINTS "${qt5_bin_dir}" )
  15. if( NOT EXISTS "${win_deploy_qt}" )
  16. message( FATAL_ERROR "windeployqt not found in ${qt5_bin_dir}" )
  17. endif()
  18. endif()
  19. function( DeployQt )
  20. if ( NOT APPLE AND NOT WIN32 )
  21. return()
  22. endif()
  23. cmake_parse_arguments(
  24. DEPLOY_QT
  25. ""
  26. "TARGET;DEPLOY_PATH"
  27. ""
  28. ${ARGN}
  29. )
  30. if( NOT DEPLOY_QT_DEPLOY_PATH )
  31. message( FATAL_ERROR "DeployQt: DEPLOY_PATH not set" )
  32. endif()
  33. # For readability
  34. set( deploy_path "${DEPLOY_QT_DEPLOY_PATH}" )
  35. message( STATUS "Installing ${DEPLOY_QT_TARGET} to ${deploy_path}" )
  36. get_target_property( name ${DEPLOY_QT_TARGET} NAME )
  37. if ( APPLE )
  38. set( app_name "${name}.app" )
  39. if (CMAKE_CONFIGURATION_TYPES)
  40. set(app_path "${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/${app_name}")
  41. set(temp_dir "${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/deployqt")
  42. else ()
  43. set(app_path "${CMAKE_CURRENT_BINARY_DIR}/${app_name}")
  44. set(temp_dir "${CMAKE_CURRENT_BINARY_DIR}/deployqt")
  45. endif ()
  46. set( temp_app_path "${temp_dir}/$<CONFIG>/${app_name}" )
  47. add_custom_command(
  48. TARGET ${DEPLOY_QT_TARGET}
  49. POST_BUILD
  50. COMMAND ${CMAKE_COMMAND} -E remove_directory "${temp_dir}"
  51. COMMAND ${CMAKE_COMMAND} -E make_directory "${temp_dir}"
  52. COMMAND ${CMAKE_COMMAND} -E copy_directory ${app_path} ${temp_app_path}
  53. COMMAND "${mac_deploy_qt}"
  54. ${temp_app_path}
  55. -verbose=1
  56. VERBATIM
  57. )
  58. install(
  59. DIRECTORY ${temp_app_path}
  60. DESTINATION "${deploy_path}"
  61. USE_SOURCE_PERMISSIONS
  62. )
  63. elseif( WIN32 )
  64. set( app_name "${name}.exe" )
  65. if( CMAKE_CONFIGURATION_TYPES )
  66. set( app_path "${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/${app_name}" )
  67. set( temp_dir "${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/deployqt" )
  68. else()
  69. set( app_path "${CMAKE_CURRENT_BINARY_DIR}/${app_name}" )
  70. set( temp_dir "${CMAKE_CURRENT_BINARY_DIR}/deployqt" )
  71. endif()
  72. set( temp_app_path "${temp_dir}/${app_name}" )
  73. add_custom_command(
  74. TARGET ${DEPLOY_QT_TARGET}
  75. POST_BUILD
  76. COMMAND ${CMAKE_COMMAND} -E remove_directory "${temp_dir}"
  77. COMMAND ${CMAKE_COMMAND} -E make_directory "${temp_dir}"
  78. COMMAND ${CMAKE_COMMAND} -E copy ${app_path} ${temp_app_path}
  79. COMMAND "${win_deploy_qt}"
  80. ${temp_app_path}
  81. --no-compiler-runtime
  82. --no-angle
  83. --no-opengl-sw
  84. --no-quick-import
  85. --no-system-d3d-compiler
  86. --concurrent
  87. --verbose=1
  88. --gamepad
  89. VERBATIM
  90. )
  91. if( NOT CMAKE_CONFIGURATION_TYPES )
  92. install(
  93. DIRECTORY ${temp_dir}/
  94. DESTINATION ${deploy_path}
  95. )
  96. else()
  97. install(
  98. DIRECTORY ${temp_dir}/
  99. CONFIGURATIONS Debug
  100. DESTINATION ${deploy_path}_debug
  101. )
  102. install(
  103. DIRECTORY ${temp_dir}/
  104. CONFIGURATIONS Release
  105. DESTINATION ${deploy_path}
  106. )
  107. install(
  108. DIRECTORY ${temp_dir}/
  109. CONFIGURATIONS RelWithDebInfo
  110. DESTINATION ${deploy_path}_withDebInfo
  111. )
  112. endif()
  113. endif()
  114. endfunction()
  115. unset( qmake_location )
  116. unset( qt5_bin_dir )