奥特QT DDS 插件库
25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.

315 satır
13KB

  1. #
  2. # Internal Qt Creator variable reference
  3. #
  4. foreach(qtcreator_var
  5. QT_QMAKE_EXECUTABLE CMAKE_PREFIX_PATH CMAKE_C_COMPILER CMAKE_CXX_COMPILER
  6. CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELWITHDEBINFO)
  7. set(__just_reference_${qtcreator_var} ${${qtcreator_var}})
  8. endforeach()
  9. option(QT_CREATOR_SOURCE_GROUPS "Qt Creator source groups extensions" ON)
  10. if (QT_CREATOR_SOURCE_GROUPS)
  11. source_group("Resources" REGULAR_EXPRESSION "\\.(pdf|plist|png|jpeg|jpg|storyboard|xcassets|qrc|svg|gif|ico|webp)$")
  12. source_group("Forms" REGULAR_EXPRESSION "\\.(ui)$")
  13. source_group("State charts" REGULAR_EXPRESSION "\\.(scxml)$")
  14. endif()
  15. if (EXISTS "${CMAKE_SOURCE_DIR}/QtCreatorPackageManager.cmake")
  16. include("${CMAKE_SOURCE_DIR}/QtCreatorPackageManager.cmake")
  17. endif()
  18. if (QT_CREATOR_SKIP_PACKAGE_MANAGER_SETUP)
  19. return()
  20. endif()
  21. option(QT_CREATOR_SKIP_PACKAGE_MANAGER_SETUP "Skip Qt Creator's package manager auto-setup" OFF)
  22. # Store the C/C++ object output extension
  23. if (CMAKE_VERSION GREATER_EQUAL "3.19")
  24. cmake_language(DEFER CALL set CMAKE_C_OUTPUT_EXTENSION "${CMAKE_C_OUTPUT_EXTENSION}" CACHE STRING "" FORCE)
  25. cmake_language(DEFER CALL set CMAKE_CXX_OUTPUT_EXTENSION "${CMAKE_CXX_OUTPUT_EXTENSION}" CACHE STRING "" FORCE)
  26. endif()
  27. macro(qtc_auto_setup_compiler_standard toolchainFile)
  28. foreach(lang_var C CXX CUDA OBJC OBJCXX)
  29. foreach(prop_var STANDARD STANDARD_REQUIRED EXTENSIONS)
  30. if (CMAKE_${lang_var}_${prop_var})
  31. file(APPEND "${toolchainFile}"
  32. "set(CMAKE_${lang_var}_${prop_var} ${CMAKE_${lang_var}_${prop_var}})\n")
  33. endif()
  34. endforeach()
  35. endforeach()
  36. # Forward important CMake variables to the package manager in the toolchain file
  37. foreach(fwd_var CMAKE_MSVC_RUNTIME_LIBRARY CMAKE_SYSROOT CMAKE_OSX_SYSROOT CMAKE_OSX_ARCHITECTURES)
  38. if (${fwd_var})
  39. file(APPEND "${toolchainFile}"
  40. "set(${fwd_var} ${${fwd_var}})\n")
  41. endif()
  42. endforeach()
  43. endmacro()
  44. #
  45. # conan
  46. #
  47. macro(qtc_auto_setup_conan)
  48. foreach(file conanfile.txt conanfile.py)
  49. if (EXISTS "${CMAKE_SOURCE_DIR}/${file}")
  50. set(conanfile_txt "${CMAKE_SOURCE_DIR}/${file}")
  51. break()
  52. endif()
  53. endforeach()
  54. if (conanfile_txt AND NOT QT_CREATOR_SKIP_CONAN_SETUP)
  55. option(QT_CREATOR_SKIP_CONAN_SETUP "Skip Qt Creator's conan package manager auto-setup" OFF)
  56. set(QT_CREATOR_CONAN_BUILD_POLICY "missing" CACHE STRING "Qt Creator's conan package manager auto-setup build policy. This is used for the BUILD property of cmake_conan_run")
  57. set_property(
  58. DIRECTORY "${CMAKE_SOURCE_DIR}"
  59. APPEND
  60. PROPERTY CMAKE_CONFIGURE_DEPENDS "${conanfile_txt}")
  61. find_program(conan_program conan)
  62. if (NOT conan_program)
  63. message(WARNING "Qt Creator: conan executable not found. "
  64. "Package manager auto-setup will be skipped. "
  65. "To disable this warning set QT_CREATOR_SKIP_CONAN_SETUP to ON.")
  66. return()
  67. endif()
  68. execute_process(COMMAND ${conan_program} --version
  69. RESULT_VARIABLE result_code
  70. OUTPUT_VARIABLE conan_version_output
  71. ERROR_VARIABLE conan_version_output)
  72. if (NOT result_code EQUAL 0)
  73. message(FATAL_ERROR "conan --version failed='${result_code}: ${conan_version_output}")
  74. endif()
  75. string(REGEX REPLACE ".*Conan version ([0-9].[0-9]).*" "\\1" conan_version "${conan_version_output}")
  76. set(conanfile_timestamp_file "${CMAKE_BINARY_DIR}/conan-dependencies/conanfile.timestamp")
  77. file(TIMESTAMP "${conanfile_txt}" conanfile_timestamp)
  78. set(do_conan_installation ON)
  79. if (EXISTS "${conanfile_timestamp_file}")
  80. file(READ "${conanfile_timestamp_file}" old_conanfile_timestamp)
  81. if ("${conanfile_timestamp}" STREQUAL "${old_conanfile_timestamp}")
  82. set(do_conan_installation OFF)
  83. endif()
  84. endif()
  85. set(conanfile_build_policy_file "${CMAKE_BINARY_DIR}/conan-dependencies/conanfile.buildpolicy")
  86. if (EXISTS "${conanfile_build_policy_file}")
  87. file(READ "${conanfile_build_policy_file}" build_policy)
  88. if (NOT "${build_policy}" STREQUAL "${QT_CREATOR_CONAN_BUILD_POLICY}")
  89. set(do_conan_installation ON)
  90. endif()
  91. endif()
  92. if (do_conan_installation)
  93. message(STATUS "Qt Creator: conan package manager auto-setup. "
  94. "Skip this step by setting QT_CREATOR_SKIP_CONAN_SETUP to ON.")
  95. file(COPY "${conanfile_txt}" DESTINATION "${CMAKE_BINARY_DIR}/conan-dependencies/")
  96. file(WRITE "${CMAKE_BINARY_DIR}/conan-dependencies/toolchain.cmake" "
  97. set(CMAKE_C_COMPILER \"${CMAKE_C_COMPILER}\")
  98. set(CMAKE_CXX_COMPILER \"${CMAKE_CXX_COMPILER}\")
  99. ")
  100. qtc_auto_setup_compiler_standard("${CMAKE_BINARY_DIR}/conan-dependencies/toolchain.cmake")
  101. if (CMAKE_TOOLCHAIN_FILE)
  102. file(APPEND "${CMAKE_BINARY_DIR}/conan-dependencies/toolchain.cmake"
  103. "include(\"${CMAKE_TOOLCHAIN_FILE}\")\n")
  104. endif()
  105. file(WRITE "${CMAKE_BINARY_DIR}/conan-dependencies/CMakeLists.txt" "
  106. cmake_minimum_required(VERSION 3.15)
  107. unset(CMAKE_PROJECT_INCLUDE_BEFORE CACHE)
  108. project(conan-setup)
  109. if (${conan_version} VERSION_GREATER_EQUAL 2.0)
  110. set(CONAN_COMMAND \"${conan_program}\")
  111. include(\"${CMAKE_CURRENT_LIST_DIR}/conan_provider.cmake\")
  112. conan_profile_detect_default()
  113. detect_host_profile(\"${CMAKE_BINARY_DIR}/conan-dependencies/conan_host_profile\")
  114. set(build_types \${CMAKE_BUILD_TYPE})
  115. if (CMAKE_CONFIGURATION_TYPES)
  116. set(build_types \${CMAKE_CONFIGURATION_TYPES})
  117. endif()
  118. foreach(type \${build_types})
  119. conan_install(
  120. -pr \"${CMAKE_BINARY_DIR}/conan-dependencies/conan_host_profile\"
  121. --build=${QT_CREATOR_CONAN_BUILD_POLICY}
  122. -s build_type=\${type}
  123. -g CMakeDeps)
  124. endforeach()
  125. get_property(CONAN_INSTALL_SUCCESS GLOBAL PROPERTY CONAN_INSTALL_SUCCESS)
  126. if (CONAN_INSTALL_SUCCESS)
  127. get_property(CONAN_GENERATORS_FOLDER GLOBAL PROPERTY CONAN_GENERATORS_FOLDER)
  128. file(TO_CMAKE_PATH \"\${CONAN_GENERATORS_FOLDER}\" CONAN_GENERATORS_FOLDER)
  129. file(WRITE \"${CMAKE_BINARY_DIR}/conan-dependencies/conan_paths.cmake\" \"
  130. list(PREPEND CMAKE_PREFIX_PATH \\\"\${CONAN_GENERATORS_FOLDER}\\\")
  131. list(PREPEND CMAKE_MODULE_PATH \\\"\${CONAN_GENERATORS_FOLDER}\\\")
  132. list(PREPEND CMAKE_FIND_ROOT_PATH \\\"\${CONAN_GENERATORS_FOLDER}\\\")
  133. list(REMOVE_DUPLICATES CMAKE_PREFIX_PATH)
  134. list(REMOVE_DUPLICATES CMAKE_MODULE_PATH)
  135. list(REMOVE_DUPLICATES CMAKE_FIND_ROOT_PATH)
  136. set(CMAKE_PREFIX_PATH \\\"\\\${CMAKE_PREFIX_PATH}\\\" CACHE STRING \\\"\\\" FORCE)
  137. set(CMAKE_MODULE_PATH \\\"\\\${CMAKE_MODULE_PATH}\\\" CACHE STRING \\\"\\\" FORCE)
  138. set(CMAKE_FIND_ROOT_PATH \\\"\\\${CMAKE_FIND_ROOT_PATH}\\\" CACHE STRING \\\"\\\" FORCE)
  139. \")
  140. endif()
  141. else()
  142. include(\"${CMAKE_CURRENT_LIST_DIR}/conan.cmake\")
  143. conan_cmake_run(
  144. CONANFILE \"${conanfile_txt}\"
  145. INSTALL_FOLDER \"${CMAKE_BINARY_DIR}/conan-dependencies\"
  146. GENERATORS cmake_paths cmake_find_package json
  147. BUILD ${QT_CREATOR_CONAN_BUILD_POLICY}
  148. ENV CONAN_CMAKE_TOOLCHAIN_FILE=\"${CMAKE_BINARY_DIR}/conan-dependencies/toolchain.cmake\"
  149. )
  150. endif()
  151. ")
  152. if (NOT DEFINED CMAKE_BUILD_TYPE AND NOT DEFINED CMAKE_CONFIGURATION_TYPES)
  153. set(CMAKE_CONFIGURATION_TYPES "Debug;Release")
  154. endif()
  155. execute_process(COMMAND ${CMAKE_COMMAND}
  156. -S "${CMAKE_BINARY_DIR}/conan-dependencies/"
  157. -B "${CMAKE_BINARY_DIR}/conan-dependencies/build"
  158. -C "${CMAKE_BINARY_DIR}/qtcsettings.cmake"
  159. -D "CMAKE_TOOLCHAIN_FILE=${CMAKE_BINARY_DIR}/conan-dependencies/toolchain.cmake"
  160. -G ${CMAKE_GENERATOR}
  161. -D CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
  162. -D "CMAKE_CONFIGURATION_TYPES=${CMAKE_CONFIGURATION_TYPES}"
  163. RESULT_VARIABLE result
  164. )
  165. if (result EQUAL 0)
  166. file(WRITE "${conanfile_timestamp_file}" "${conanfile_timestamp}")
  167. file(WRITE "${conanfile_build_policy_file}" ${QT_CREATOR_CONAN_BUILD_POLICY})
  168. else()
  169. message(WARNING "Qt Creator's conan package manager auto-setup failed. Consider setting "
  170. "QT_CREATOR_SKIP_CONAN_SETUP to ON and reconfigure to skip this step.")
  171. return()
  172. endif()
  173. endif()
  174. include("${CMAKE_BINARY_DIR}/conan-dependencies/conan_paths.cmake")
  175. endif()
  176. unset(conanfile_txt)
  177. endmacro()
  178. qtc_auto_setup_conan()
  179. #
  180. # vcpkg
  181. #
  182. macro(qtc_auto_setup_vcpkg)
  183. if (EXISTS "${CMAKE_SOURCE_DIR}/vcpkg.json" AND NOT QT_CREATOR_SKIP_VCPKG_SETUP)
  184. option(QT_CREATOR_SKIP_VCPKG_SETUP "Skip Qt Creator's vcpkg package manager auto-setup" OFF)
  185. set_property(
  186. DIRECTORY "${CMAKE_SOURCE_DIR}"
  187. APPEND
  188. PROPERTY CMAKE_CONFIGURE_DEPENDS "${CMAKE_SOURCE_DIR}/vcpkg.json")
  189. find_program(vcpkg_program vcpkg
  190. PATHS $ENV{VCPKG_ROOT} ${CMAKE_SOURCE_DIR}/vcpkg ${CMAKE_SOURCE_DIR}/3rdparty/vcpkg
  191. NO_DEFAULT_PATH
  192. )
  193. if (NOT vcpkg_program)
  194. message(WARNING "Qt Creator: vcpkg executable not found. "
  195. "Package manager auto-setup will be skipped. "
  196. "To disable this warning set QT_CREATOR_SKIP_VCPKG_SETUP to ON.")
  197. return()
  198. endif()
  199. execute_process(COMMAND ${vcpkg_program} version
  200. RESULT_VARIABLE result_code
  201. OUTPUT_VARIABLE vcpkg_version_output
  202. ERROR_VARIABLE vcpkg_version_output)
  203. if (NOT result_code EQUAL 0)
  204. message(FATAL_ERROR "vcpkg version failed='${result_code}: ${vcpkg_version_output}")
  205. endif()
  206. # Resolve any symlinks
  207. get_filename_component(vpkg_program_real_path ${vcpkg_program} REALPATH)
  208. get_filename_component(vpkg_root ${vpkg_program_real_path} DIRECTORY)
  209. if (NOT EXISTS "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake")
  210. message(STATUS "Qt Creator: vcpkg package manager auto-setup. "
  211. "Skip this step by setting QT_CREATOR_SKIP_VCPKG_SETUP to ON.")
  212. file(WRITE "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake" "
  213. set(CMAKE_C_COMPILER \"${CMAKE_C_COMPILER}\")
  214. set(CMAKE_CXX_COMPILER \"${CMAKE_CXX_COMPILER}\")
  215. ")
  216. qtc_auto_setup_compiler_standard("${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake")
  217. if (CMAKE_TOOLCHAIN_FILE AND NOT
  218. CMAKE_TOOLCHAIN_FILE STREQUAL "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake")
  219. file(APPEND "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake"
  220. "include(\"${CMAKE_TOOLCHAIN_FILE}\")\n")
  221. endif()
  222. if (VCPKG_TARGET_TRIPLET)
  223. set(vcpkg_triplet ${VCPKG_TARGET_TRIPLET})
  224. else()
  225. if (ANDROID_ABI)
  226. if (ANDROID_ABI STREQUAL "armeabi-v7a")
  227. set(vcpkg_triplet arm-neon-android)
  228. elseif (ANDROID_ABI STREQUAL "arm64-v8a")
  229. set(vcpkg_triplet arm64-android)
  230. elseif (ANDROID_ABI STREQUAL "x86")
  231. set(vcpkg_triplet x86-android)
  232. elseif (ANDROID_ABI STREQUAL "x86_64")
  233. set(vcpkg_triplet x64-android)
  234. else()
  235. message(FATAL_ERROR "Unsupported Android ABI: ${ANDROID_ABI}")
  236. endif()
  237. # Needed by vcpkg/scripts/toolchains/android.cmake
  238. file(APPEND "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake" "
  239. set(ENV{ANDROID_NDK_HOME} \"${ANDROID_NDK}\")
  240. ")
  241. elseif (WIN32)
  242. set(vcpkg_triplet x64-mingw-static)
  243. if (CMAKE_CXX_COMPILER MATCHES ".*/(.*)/cl.exe")
  244. set(vcpkg_triplet ${CMAKE_MATCH_1}-windows)
  245. endif()
  246. elseif(APPLE)
  247. # We're too early to use CMAKE_HOST_SYSTEM_PROCESSOR
  248. execute_process(
  249. COMMAND uname -m
  250. OUTPUT_VARIABLE __apple_host_system_processor
  251. OUTPUT_STRIP_TRAILING_WHITESPACE)
  252. if (__apple_host_system_processor MATCHES "arm64")
  253. set(vcpkg_triplet arm64-osx)
  254. else()
  255. set(vcpkg_triplet x64-osx)
  256. endif()
  257. else()
  258. set(vcpkg_triplet x64-linux)
  259. endif()
  260. endif()
  261. file(APPEND "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake" "
  262. set(VCPKG_TARGET_TRIPLET ${vcpkg_triplet})
  263. include(\"${vpkg_root}/scripts/buildsystems/vcpkg.cmake\")
  264. ")
  265. endif()
  266. set(CMAKE_TOOLCHAIN_FILE "${CMAKE_BINARY_DIR}/vcpkg-dependencies/toolchain.cmake" CACHE PATH "" FORCE)
  267. # Save CMAKE_PREFIX_PATH and CMAKE_MODULE_PATH as cache variables
  268. if (CMAKE_VERSION GREATER_EQUAL "3.19")
  269. cmake_language(DEFER CALL list REMOVE_DUPLICATES CMAKE_PREFIX_PATH)
  270. cmake_language(DEFER CALL list REMOVE_DUPLICATES CMAKE_MODULE_PATH)
  271. cmake_language(DEFER CALL set CMAKE_PREFIX_PATH "${CMAKE_PREFIX_PATH}" CACHE STRING "" FORCE)
  272. cmake_language(DEFER CALL set CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH}" CACHE STRING "" FORCE)
  273. endif()
  274. endif()
  275. endmacro()
  276. qtc_auto_setup_vcpkg()