CMakeLists.txt 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. cmake_minimum_required(VERSION 3.19)
  2. project(soft_bus LANGUAGES CXX)
  3. # 设置C++标准
  4. set(CMAKE_CXX_STANDARD 20)
  5. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  6. set(CMAKE_AUTORCC ON)
  7. set(CMAKE_AUTOMOC ON)
  8. # 查找Qt6
  9. find_package(Qt6 6.5 REQUIRED COMPONENTS Core Widgets SerialPort Charts Sql)
  10. # 检测编译平台
  11. if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "4")
  12. set(PlatformDir "x86")
  13. else()
  14. set(PlatformDir "x64")
  15. endif()
  16. # 设置ADS路径
  17. SET(ADS_DIR "${PROJECT_SOURCE_DIR}/advanced_dock_system")
  18. # 关键修改:添加ADS子目录
  19. add_subdirectory(${ADS_DIR}/src)
  20. # 添加Qt项目设置
  21. qt_standard_project_setup()
  22. # 添加可执行文件
  23. qt_add_executable(soft_bus
  24. WIN32 MACOSX_BUNDLE
  25. main.cpp
  26. src/soft_bus_core/soft_bus_core.cpp
  27. src/soft_bus_core/soft_bus_core.h
  28. src/serial_manager/serial_manager.h
  29. src/serial_manager/serial_manager.cpp
  30. src/serial_manager/serial_data_buffer.h
  31. src/serial_manager/serial_data_buffer.cpp
  32. src/serial_manager/serial_storage_thread.h
  33. src/serial_manager/serial_storage_thread.cpp
  34. src/serial_manager/serial_parser_thread.h
  35. src/serial_manager/serial_parser_thread.cpp
  36. src/devices/DeviceWatcherBase.h
  37. src/devices/DeviceWatcherBase.cpp
  38. src/devices/DeviceManager.h
  39. src/devices/DeviceManager.cpp
  40. src/devices/serial/SerialPortInfo.h
  41. src/devices/serial/SerialPortWatcher.h
  42. src/devices/serial/SerialPortWatcher.cpp
  43. src/devices/usb/UsbDeviceInfo.h
  44. src/devices/usb/UsbDeviceWatcher.h
  45. src/devices/usb/UsbDeviceWatcher.cpp
  46. src/devices/network/NetworkDeviceInfo.h
  47. src/devices/network/NetworkPortWatcher.h
  48. src/devices/network/NetworkPortWatcher.cpp
  49. src/devices/platform/linux/UdevMonitor.h
  50. src/devices/platform/linux/UdevMonitor.cpp
  51. src/devices/platform/linux/LinuxDeviceUtils.h
  52. src/devices/platform/windows/WinDeviceMonitor.h
  53. src/devices/platform/windows/WinDeviceMonitor.cpp
  54. src/devices/platform/windows/WinDeviceUtils.h
  55. src/can_manager/can_manager.h
  56. src/can_manager/can_manager.cpp
  57. mainwindow.h
  58. mainwindow.cpp
  59. src/toolbar/toolbar.h src/toolbar/toolbar.cpp
  60. resource.qrc
  61. src/view_core/viewcore.h src/view_core/viewcore.cpp src/view_core/viewcore.ui
  62. src/view_serial/serialmodule.h src/view_serial/serialmodule.cpp
  63. src/view_serial/serialdockpage.h src/view_serial/serialdockpage.cpp
  64. src/view_serial/serial_settings_widget.h src/view_serial/serial_settings_widget.cpp src/view_serial/serial_settings_widget.ui
  65. src/view_can/viewcan.h src/view_can/viewcan.cpp src/view_can/viewcan.ui
  66. src/view_can/can_data_widget.h src/view_can/can_data_widget.cpp src/view_can/can_data_widget.ui
  67. src/device_config/device_tree_widget.h src/device_config/device_tree_widget.cpp src/device_config/device_tree_widget.ui
  68. src/libmodbus/modbus_config_widget.h src/libmodbus/modbus_config_widget.cpp src/libmodbus/modbus_config_widget.ui
  69. src/libmodbus/src/modbus.c src/libmodbus/src/modbus-data.c
  70. src/libmodbus/src/modbus-rtu.c src/libmodbus/src/modbus-tcp.c
  71. src/view_serial/serial_data_widget.h src/view_serial/serial_data_widget.cpp src/view_serial/serial_data_widget.ui
  72. src/message_viewer/raw_data_table_widget.h src/message_viewer/raw_data_table_widget.cpp src/message_viewer/raw_data_table_widget.ui
  73. src/message_viewer/bus_data_table_widget.h src/message_viewer/bus_data_table_widget.cpp src/message_viewer/bus_data_table_widget.ui
  74. src/message_viewer/message_viewer_widget.h src/message_viewer/message_viewer_widget.cpp
  75. src/my_dock_manager/mdockmanager.cpp src/my_dock_manager/mdockmanager.h
  76. src/database_manager/database_types.h
  77. src/database_manager/databaseconnectiondock.h src/database_manager/databaseconnectiondock.cpp
  78. src/database_manager/databasepage.h src/database_manager/databasepage.cpp src/database_manager/databasepage.ui
  79. src/database_manager/databasemodule.h src/database_manager/databasemodule.cpp
  80. src/database_manager/databasesearchdialog.h src/database_manager/databasesearchdialog.cpp src/database_manager/databasesearchdialog.ui
  81. # 新增:公共域模型 (DOM)
  82. src/common/dom/DomBase.h
  83. src/common/types.h
  84. # 新增:核心层 - 协议适配层 (PAL)
  85. src/core/pal/interfaces/IProtocolAdapter.h
  86. src/core/pal/serial/SerialProtocolAdapter.h
  87. src/core/pal/serial/SerialProtocolAdapter.cpp
  88. # 新增:核心层 - 数据抽象层 (DAL)
  89. src/core/dal/mapper/DataMapper.h
  90. src/core/dal/mapper/DataMapper.cpp
  91. src/core/dal/processor/DataProcessor.h
  92. src/core/dal/processor/DataProcessor.cpp
  93. # 新增:核心层 - 服务总线层 (SBL)
  94. src/core/sbl/dispatcher/MessageDispatcher.h
  95. src/core/sbl/dispatcher/MessageDispatcher.cpp
  96. src/core/sbl/pubsub/TopicTree.h
  97. src/core/sbl/pubsub/TopicTree.cpp
  98. # 新增:核心单例
  99. src/core/SoftBusCore.h
  100. src/core/SoftBusCore.cpp
  101. # 新增:核心服务管理器
  102. src/core/CoreService.h
  103. src/core/CoreService.cpp
  104. # 新增:统一接口层 (API)
  105. src/api/SoftBusAPI.h
  106. src/api/SoftBusAPI.cpp
  107. )
  108. # 关键修改:链接ADS库(使用目标名称)
  109. if(Qt6_VERSION_MAJOR EQUAL 6)
  110. target_link_libraries(soft_bus PRIVATE ads::qtadvanceddocking-qt6)
  111. else()
  112. target_link_libraries(soft_bus PRIVATE ads::qtadvanceddocking-qt5)
  113. endif()
  114. # 设置CAN API库路径
  115. set(CAN_API_DIR "${PROJECT_SOURCE_DIR}/libs/can_api")
  116. # 转换为绝对路径以确保链接器能找到库
  117. get_filename_component(CAN_API_LIB "${CAN_API_DIR}/lib/lib_emuc2_64.a" ABSOLUTE)
  118. # 验证库文件是否存在
  119. if(NOT EXISTS "${CAN_API_LIB}")
  120. message(FATAL_ERROR "CAN API library not found: ${CAN_API_LIB}")
  121. endif()
  122. # 创建导入的静态库目标
  123. add_library(emuc2_static STATIC IMPORTED)
  124. set_target_properties(emuc2_static PROPERTIES
  125. IMPORTED_LOCATION "${CAN_API_LIB}"
  126. )
  127. # 链接其他库
  128. # 注意:静态库的链接顺序很重要
  129. # CAN API库将在Linux部分通过target_link_options使用--whole-archive方式链接
  130. target_link_libraries(soft_bus
  131. PRIVATE
  132. Qt6::Core
  133. Qt6::Widgets
  134. Qt6::SerialPort
  135. Qt6::Charts
  136. Qt6::Sql
  137. pthread
  138. )
  139. if(WIN32)
  140. target_link_libraries(soft_bus
  141. PRIVATE
  142. shlwapi
  143. rpcrt4
  144. ws2_32 # Winsock 库
  145. advapi32 # 高级服务库
  146. user32 # 用户界面库
  147. gdi32 # 图形设备接口
  148. ole32 # OLE 库
  149. oleaut32 # OLE 自动化
  150. uuid # UUID 支持
  151. "${CAN_API_LIB}" # Windows下直接链接
  152. )
  153. else()
  154. # 查找 zlib 库
  155. find_package(ZLIB REQUIRED)
  156. # 在链接库时加入 zlib 库
  157. if(ZLIB_FOUND)
  158. target_link_libraries(soft_bus PRIVATE ${ZLIB_LIBRARIES})
  159. endif()
  160. # 查找并链接 libudev 用于设备热插拔监控
  161. find_library(UDEV_LIB udev REQUIRED)
  162. if(UDEV_LIB)
  163. target_link_libraries(soft_bus PRIVATE ${UDEV_LIB})
  164. endif()
  165. # 添加CAN API库目录到链接路径(Linux)
  166. target_link_directories(soft_bus PRIVATE "${CAN_API_DIR}/lib")
  167. # 链接CAN API静态库,使用 --whole-archive 确保所有符号都被链接
  168. # 直接在 target_link_libraries 中混合使用选项和库文件,CMake 会保持顺序
  169. target_link_libraries(soft_bus PRIVATE
  170. "-Wl,--whole-archive"
  171. "${CAN_API_LIB}"
  172. "-Wl,--no-whole-archive"
  173. )
  174. endif()
  175. # 添加包含路径
  176. target_include_directories(soft_bus PRIVATE
  177. ${PROJECT_SOURCE_DIR}/src
  178. ${ADS_DIR}/src # ADS头文件路径
  179. ${PROJECT_SOURCE_DIR}/src/libmodbus/src # libmodbus库头文件路径
  180. ${CAN_API_DIR}/include # CAN API头文件路径
  181. )
  182. # 安装配置
  183. include(GNUInstallDirs)
  184. install(TARGETS soft_bus
  185. BUNDLE DESTINATION .
  186. RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
  187. LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
  188. )
  189. qt_generate_deploy_app_script(
  190. TARGET soft_bus
  191. OUTPUT_SCRIPT deploy_script
  192. NO_UNSUPPORTED_PLATFORM_ERROR
  193. )
  194. install(SCRIPT ${deploy_script})