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

CMakeLists.txt 4.7KB

6 月之前
6 月之前
6 月之前
6 月之前
6 月之前
6 月之前
6 月之前
6 月之前
6 月之前
6 月之前
6 月之前
6 月之前
6 月之前
6 月之前
6 月之前
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. cmake_minimum_required(VERSION 3.16)
  2. # 插件项目信息
  3. project(AQTSampleMachinePlug
  4. VERSION 1.0.0
  5. DESCRIPTION "AQT示例机器插件"
  6. LANGUAGES CXX
  7. )
  8. # 基本设置
  9. set(CMAKE_CXX_STANDARD 17)
  10. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  11. set(CMAKE_AUTOMOC ON)
  12. set(CMAKE_POSITION_INDEPENDENT_CODE ON)
  13. # 查找依赖包
  14. find_package(Qt6 REQUIRED COMPONENTS Core Quick)
  15. find_package(fastcdr 2 REQUIRED)
  16. find_package(fastdds 3 REQUIRED)
  17. # 源文件设置
  18. set(PLUGIN_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/AQTSampleMachinePlug.cxx")
  19. set(PLUGIN_HEADERS "${CMAKE_CURRENT_SOURCE_DIR}/AQTSampleMachinePlug.hpp")
  20. set(DDS_FILES "${CMAKE_CURRENT_SOURCE_DIR}/DDSSampleMachine.IDL")
  21. # 查找DDS生成的文件
  22. file(GLOB DDS_GENERATED_FILES
  23. "${CMAKE_CURRENT_SOURCE_DIR}/DDSSampleMachine*.cxx"
  24. "${CMAKE_CURRENT_SOURCE_DIR}/DDSSampleMachine*.cpp"
  25. "${CMAKE_CURRENT_SOURCE_DIR}/DDSSampleMachine*.h"
  26. "${CMAKE_CURRENT_SOURCE_DIR}/DDSSampleMachine*.hpp"
  27. )
  28. # 添加 Snap7 源代码
  29. set(SNAP7_SOURCES
  30. "${SNAP7_ROOT}/src/sys/snap7_libmain.cpp"
  31. "${SNAP7_ROOT}/src/sys/snap7_client.cpp"
  32. )
  33. # 创建插件库
  34. add_library(${PROJECT_NAME} SHARED
  35. ${PLUGIN_SOURCES}
  36. ${PLUGIN_HEADERS}
  37. ${DDS_FILES}
  38. ${DDS_GENERATED_FILES}
  39. ${SNAP7_SOURCES} # 添加 Snap7 源代码
  40. AQTSampleMachinePlug.json
  41. )
  42. # 设置编译定义
  43. target_compile_definitions(${PROJECT_NAME} PRIVATE
  44. AQTSAMPLEMACHINEPLUG_LIBRARY
  45. QT_PLUGIN
  46. $<$<CONFIG:Debug>:QT_QML_DEBUG>
  47. )
  48. # 设置包含目录
  49. target_include_directories(${PROJECT_NAME}
  50. PRIVATE
  51. ${CMAKE_SOURCE_DIR}
  52. ${CMAKE_CURRENT_SOURCE_DIR}
  53. ${CMAKE_CURRENT_SOURCE_DIR}/include
  54. ${SNAP7_INCLUDE_DIR}
  55. $<TARGET_PROPERTY:Qt::Core,INTERFACE_INCLUDE_DIRECTORIES>
  56. $<TARGET_PROPERTY:Qt::Quick,INTERFACE_INCLUDE_DIRECTORIES>
  57. )
  58. # 在 project() 声明后立即添加
  59. set(LOCAL_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/include")
  60. set(LOCAL_LIB_DIR "${CMAKE_CURRENT_SOURCE_DIR}/lib")
  61. # Snap7 库路径设置
  62. if(WIN32)
  63. set(SNAP7_INCLUDE_DIR "${LOCAL_INCLUDE_DIR}")
  64. set(SNAP7_LIBRARY "${LOCAL_LIB_DIR}/snap7.lib")
  65. set(SNAP7_DLL "${LOCAL_LIB_DIR}/snap7.dll")
  66. else()
  67. find_library(SNAP7_LIBRARY NAMES snap7 libsnap7)
  68. find_path(SNAP7_INCLUDE_DIR NAMES snap7.h)
  69. endif()
  70. # 检查是否找到库
  71. if(NOT SNAP7_LIBRARY OR NOT SNAP7_INCLUDE_DIR)
  72. message(FATAL_ERROR "Snap7 library not found. Please check SNAP7_ROOT path.")
  73. endif()
  74. # 链接 Snap7 库
  75. target_link_libraries(${PROJECT_NAME} PRIVATE
  76. Qt::Core
  77. Qt::Quick
  78. fastdds
  79. fastcdr
  80. ${SNAP7_LIBRARY}
  81. )
  82. # 复制 DLL 到输出目录
  83. if(WIN32)
  84. add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
  85. COMMAND ${CMAKE_COMMAND} -E copy_if_different
  86. ${SNAP7_DLL}
  87. $<TARGET_FILE_DIR:${PROJECT_NAME}>
  88. )
  89. endif()
  90. # 设置目标属性
  91. set_target_properties(${PROJECT_NAME} PROPERTIES
  92. PREFIX "" # 移除库文件前缀
  93. SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX} # 根据平台设置正确的后缀(.dll/.so)
  94. LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
  95. RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
  96. )
  97. # 平台特定配置
  98. if(WIN32)
  99. set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) # Windows下导出所有符号
  100. endif()
  101. # Debug模式下的编译选项
  102. if(CMAKE_BUILD_TYPE STREQUAL "Debug")
  103. if(WIN32)
  104. target_compile_options(${PROJECT_NAME} PRIVATE -g -Wall)
  105. else()
  106. target_compile_options(${PROJECT_NAME} PRIVATE -g -Wall -Wextra)
  107. endif()
  108. endif()
  109. # 输出构建信息
  110. message(STATUS "----------------------------------------")
  111. message(STATUS "插件名称: ${PROJECT_NAME}")
  112. message(STATUS "插件版本: ${PROJECT_VERSION}")
  113. message(STATUS "构建类型: ${CMAKE_BUILD_TYPE}")
  114. message(STATUS "输出目录: ${CMAKE_BINARY_DIR}/bin")
  115. message(STATUS "输出文件: ${PROJECT_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}")
  116. message(STATUS "----------------------------------------")
  117. # 添加这行来打印 Qt 包含路径
  118. message(STATUS "Qt Include Dirs: ${Qt6Core_INCLUDE_DIRS}")
  119. # 在文件开头添加
  120. if(MSVC)
  121. # 添加预处理器定义
  122. add_definitions(-DSNAP7_EXPORTS)
  123. endif()
  124. # 修改链接设置
  125. target_link_libraries(${PROJECT_NAME}
  126. PRIVATE
  127. Qt::Core
  128. Qt::Quick
  129. fastdds
  130. fastcdr
  131. ${SNAP7_LIBRARY}
  132. )
  133. if(MSVC)
  134. # 为 MSVC 添加特定的链接选项
  135. target_link_options(${PROJECT_NAME}
  136. PRIVATE
  137. /NODEFAULTLIB:library
  138. /DEFAULTLIB:msvcrt.lib
  139. )
  140. endif()
  141. if(MSVC)
  142. # 使用多线程 DLL 运行时库
  143. set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL")
  144. endif()