奥特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.

172 lines
4.5KB

  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. # 创建插件库
  66. add_library(${PROJECT_NAME} SHARED
  67. ${ALL_SOURCES}
  68. AQTSampleMachinePlug.json
  69. )
  70. # 调试配置 - 移动到创建目标之后
  71. if(CMAKE_BUILD_TYPE STREQUAL "Debug")
  72. if(MSVC)
  73. target_compile_options(${PROJECT_NAME} PRIVATE
  74. /W4
  75. /Zi # 调试信息
  76. /Od # 禁用优化
  77. )
  78. else()
  79. target_compile_options(${PROJECT_NAME} PRIVATE
  80. -g
  81. -Wall
  82. -Wextra
  83. -O0
  84. )
  85. endif()
  86. # 添加调试信息
  87. message(STATUS "Debug build - adding debug symbols")
  88. message(STATUS "Compiler flags: ${CMAKE_CXX_FLAGS_DEBUG}")
  89. endif()
  90. # 定义导出宏
  91. target_compile_definitions(${PROJECT_NAME}
  92. PRIVATE
  93. AQTSAMPLEMACHINEPLUG_LIBRARY
  94. QT_PLUGIN
  95. $<$<CONFIG:Debug>:QT_QML_DEBUG>
  96. )
  97. # 添加包含目录
  98. target_include_directories(${PROJECT_NAME}
  99. PRIVATE
  100. ${CMAKE_SOURCE_DIR}
  101. PUBLIC
  102. ${CMAKE_CURRENT_SOURCE_DIR}
  103. )
  104. # 链接依赖库
  105. target_link_libraries(${PROJECT_NAME}
  106. PRIVATE
  107. Qt6::Core
  108. Qt6::Quick
  109. fastdds
  110. fastcdr
  111. )
  112. # 设置目标属性
  113. set_target_properties(${PROJECT_NAME} PROPERTIES
  114. OUTPUT_NAME "${PROJECT_NAME}"
  115. LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/plugins"
  116. RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/plugins"
  117. PREFIX ""
  118. SUFFIX "${CMAKE_SHARED_LIBRARY_SUFFIX}" # 使用平台相关的后缀
  119. POSITION_INDEPENDENT_CODE ON
  120. VERSION ${PROJECT_VERSION}
  121. SOVERSION ${PROJECT_VERSION_MAJOR}
  122. # RPATH 设置
  123. SKIP_BUILD_RPATH FALSE
  124. BUILD_WITH_INSTALL_RPATH FALSE
  125. INSTALL_RPATH "$ORIGIN:${CMAKE_INSTALL_PREFIX}/lib"
  126. INSTALL_RPATH_USE_LINK_PATH TRUE
  127. )
  128. # 平台特定配置
  129. if(UNIX AND NOT APPLE)
  130. set_target_properties(${PROJECT_NAME} PROPERTIES
  131. INSTALL_RPATH "$ORIGIN:${CMAKE_INSTALL_PREFIX}/lib:/usr/local/lib"
  132. )
  133. endif()
  134. # 安装配置
  135. install(TARGETS ${PROJECT_NAME}
  136. LIBRARY DESTINATION bin
  137. RUNTIME DESTINATION bin
  138. )
  139. # Windows 特定配置
  140. if(WIN32)
  141. set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
  142. endif()
  143. # 最终构建信息
  144. message(STATUS "----------------------------------------")
  145. message(STATUS "Build Type: ${CMAKE_BUILD_TYPE}")
  146. message(STATUS "Binary Dir: ${CMAKE_BINARY_DIR}")
  147. message(STATUS "Plugin Output Dir: ${CMAKE_BINARY_DIR}/bin")
  148. message(STATUS "Plugin name will be: ${PROJECT_NAME}.so")
  149. message(STATUS "----------------------------------------")