奥特QT DDS 插件库
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

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