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

156 lines
4.1KB

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