奥特QT DDS 插件库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

188 line
4.9KB

  1. cmake_minimum_required(VERSION 3.16)
  2. project(AQTSampleMachinePlug
  3. VERSION 1.0.0
  4. DESCRIPTION "Sample Machine Plugin for AQT"
  5. LANGUAGES CXX
  6. )
  7. # 项目配置
  8. set(CMAKE_CXX_STANDARD 17)
  9. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  10. set(CMAKE_AUTOMOC ON)
  11. set(CMAKE_POSITION_INDEPENDENT_CODE ON)
  12. # 调试输出
  13. message(STATUS "----------------------------------------")
  14. message(STATUS "Project: ${PROJECT_NAME}")
  15. message(STATUS "Version: ${PROJECT_VERSION}")
  16. message(STATUS "Current source dir: ${CMAKE_CURRENT_SOURCE_DIR}")
  17. message(STATUS "FastDDS lib dir: ${fastdds_DIR}")
  18. message(STATUS "FastCDR lib dir: ${fastcdr_DIR}")
  19. message(STATUS "----------------------------------------")
  20. # 查找依赖包
  21. find_package(Qt6 REQUIRED COMPONENTS Core Quick)
  22. if(NOT fastcdr_FOUND)
  23. find_package(fastcdr 2 REQUIRED)
  24. endif()
  25. if(NOT fastdds_FOUND)
  26. find_package(fastdds 3 REQUIRED)
  27. endif()
  28. # 源文件分组
  29. set(PLUGIN_SOURCES
  30. "${CMAKE_CURRENT_SOURCE_DIR}/AQTSampleMachinePlug.cxx"
  31. )
  32. set(PLUGIN_HEADERS
  33. "${CMAKE_CURRENT_SOURCE_DIR}/AQTSampleMachinePlug.hpp"
  34. )
  35. set(DDS_FILES
  36. "${CMAKE_CURRENT_SOURCE_DIR}/DDSSampleMachine.IDL"
  37. )
  38. # 查找生成的 DDS 文件
  39. file(GLOB DDS_GENERATED_SOURCES
  40. "${CMAKE_CURRENT_SOURCE_DIR}/DDSSampleMachine*.cxx"
  41. "${CMAKE_CURRENT_SOURCE_DIR}/DDSSampleMachine*.cpp"
  42. )
  43. file(GLOB DDS_GENERATED_HEADERS
  44. "${CMAKE_CURRENT_SOURCE_DIR}/DDSSampleMachine*.h"
  45. "${CMAKE_CURRENT_SOURCE_DIR}/DDSSampleMachine*.hpp"
  46. )
  47. # 合并所有源文件
  48. set(ALL_SOURCES
  49. ${PLUGIN_SOURCES}
  50. ${PLUGIN_HEADERS}
  51. ${DDS_FILES}
  52. ${DDS_GENERATED_SOURCES}
  53. ${DDS_GENERATED_HEADERS}
  54. )
  55. # 创建源文件组
  56. source_group("Plugin Files" FILES ${PLUGIN_SOURCES} ${PLUGIN_HEADERS})
  57. source_group("DDS Files" FILES ${DDS_FILES})
  58. source_group("DDS Generated" FILES ${DDS_GENERATED_SOURCES} ${DDS_GENERATED_HEADERS})
  59. # 设置输出文件名和后缀
  60. if(WIN32)
  61. set(CMAKE_SHARED_LIBRARY_SUFFIX ".dll")
  62. else()
  63. set(CMAKE_SHARED_LIBRARY_SUFFIX ".so")
  64. endif()
  65. # 在 add_library 之前添加
  66. set(QML_FILES
  67. ConfigWindow.qml
  68. )
  69. # 创建插件库
  70. add_library(${PROJECT_NAME} SHARED
  71. ${ALL_SOURCES}
  72. ${QML_FILES}
  73. AQTSampleMachinePlug.json
  74. )
  75. # 确保 QML 文件被复制到正确的位置
  76. foreach(QML_FILE ${QML_FILES})
  77. add_custom_command(
  78. TARGET ${PROJECT_NAME} POST_BUILD
  79. COMMAND ${CMAKE_COMMAND} -E copy
  80. ${CMAKE_CURRENT_SOURCE_DIR}/${QML_FILE}
  81. ${CMAKE_BINARY_DIR}/plugins/${PROJECT_NAME}/${QML_FILE}
  82. )
  83. endforeach()
  84. # 调试配置 - 移动到创建目标之后
  85. if(CMAKE_BUILD_TYPE STREQUAL "Debug")
  86. if(MSVC)
  87. target_compile_options(${PROJECT_NAME} PRIVATE
  88. /W4
  89. /Zi # 调试信息
  90. /Od # 禁用优化
  91. )
  92. else()
  93. target_compile_options(${PROJECT_NAME} PRIVATE
  94. -g
  95. -Wall
  96. -Wextra
  97. -O0
  98. )
  99. endif()
  100. # 添加调试信息
  101. message(STATUS "Debug build - adding debug symbols")
  102. message(STATUS "Compiler flags: ${CMAKE_CXX_FLAGS_DEBUG}")
  103. endif()
  104. # 定义导出宏
  105. target_compile_definitions(${PROJECT_NAME}
  106. PRIVATE
  107. AQTSAMPLEMACHINEPLUG_LIBRARY
  108. QT_PLUGIN
  109. $<$<CONFIG:Debug>:QT_QML_DEBUG>
  110. )
  111. # 添加包含目录
  112. target_include_directories(${PROJECT_NAME}
  113. PRIVATE
  114. ${CMAKE_SOURCE_DIR}
  115. PUBLIC
  116. ${CMAKE_CURRENT_SOURCE_DIR}
  117. )
  118. # 链接依赖库
  119. target_link_libraries(${PROJECT_NAME}
  120. PRIVATE
  121. Qt6::Core
  122. Qt6::Quick
  123. fastdds
  124. fastcdr
  125. )
  126. # 设置目标属性
  127. set_target_properties(${PROJECT_NAME} PROPERTIES
  128. OUTPUT_NAME "${PROJECT_NAME}"
  129. LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/plugins"
  130. RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/plugins"
  131. PREFIX ""
  132. SUFFIX "${CMAKE_SHARED_LIBRARY_SUFFIX}" # 使用平台相关的后缀
  133. POSITION_INDEPENDENT_CODE ON
  134. VERSION ${PROJECT_VERSION}
  135. SOVERSION ${PROJECT_VERSION_MAJOR}
  136. # RPATH 设置
  137. SKIP_BUILD_RPATH FALSE
  138. BUILD_WITH_INSTALL_RPATH FALSE
  139. INSTALL_RPATH "$ORIGIN:${CMAKE_INSTALL_PREFIX}/lib"
  140. INSTALL_RPATH_USE_LINK_PATH TRUE
  141. )
  142. # 平台特定配置
  143. if(UNIX AND NOT APPLE)
  144. set_target_properties(${PROJECT_NAME} PROPERTIES
  145. INSTALL_RPATH "$ORIGIN:${CMAKE_INSTALL_PREFIX}/lib:/usr/local/lib"
  146. )
  147. endif()
  148. # 安装配置
  149. install(TARGETS ${PROJECT_NAME}
  150. LIBRARY DESTINATION bin
  151. RUNTIME DESTINATION bin
  152. )
  153. # Windows 特定配置
  154. if(WIN32)
  155. set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
  156. endif()
  157. # 最终构建信息
  158. message(STATUS "----------------------------------------")
  159. message(STATUS "Build Type: ${CMAKE_BUILD_TYPE}")
  160. message(STATUS "Binary Dir: ${CMAKE_BINARY_DIR}")
  161. message(STATUS "Plugin Output Dir: ${CMAKE_BINARY_DIR}/bin")
  162. message(STATUS "Plugin name will be: ${PROJECT_NAME}.so")
  163. message(STATUS "----------------------------------------")