| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- cmake_minimum_required(VERSION 3.19)
- project(soft_bus LANGUAGES CXX)
- # 设置C++标准
- set(CMAKE_CXX_STANDARD 20)
- set(CMAKE_CXX_STANDARD_REQUIRED ON)
- set(CMAKE_AUTORCC ON)
- set(CMAKE_AUTOMOC ON)
- # 查找Qt6
- find_package(Qt6 6.5 REQUIRED COMPONENTS Core Widgets SerialPort Charts Sql)
- # 检测编译平台
- if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "4")
- set(PlatformDir "x86")
- else()
- set(PlatformDir "x64")
- endif()
- # 设置ADS路径
- SET(ADS_DIR "${PROJECT_SOURCE_DIR}/advanced_dock_system")
- # 关键修改:添加ADS子目录
- add_subdirectory(${ADS_DIR}/src)
- # 添加Qt项目设置
- qt_standard_project_setup()
- # 添加可执行文件
- qt_add_executable(soft_bus
- WIN32 MACOSX_BUNDLE
- main.cpp
- src/soft_bus_core/soft_bus_core.cpp
- src/soft_bus_core/soft_bus_core.h
- src/serial_manager/serial_manager.h
- src/serial_manager/serial_manager.cpp
- src/serial_manager/serial_data_buffer.h
- src/serial_manager/serial_data_buffer.cpp
- src/serial_manager/serial_storage_thread.h
- src/serial_manager/serial_storage_thread.cpp
- src/serial_manager/serial_parser_thread.h
- src/serial_manager/serial_parser_thread.cpp
- src/devices/DeviceWatcherBase.h
- src/devices/DeviceWatcherBase.cpp
- src/devices/DeviceManager.h
- src/devices/DeviceManager.cpp
- src/devices/serial/SerialPortInfo.h
- src/devices/serial/SerialPortWatcher.h
- src/devices/serial/SerialPortWatcher.cpp
- src/devices/usb/UsbDeviceInfo.h
- src/devices/usb/UsbDeviceWatcher.h
- src/devices/usb/UsbDeviceWatcher.cpp
- src/devices/network/NetworkDeviceInfo.h
- src/devices/network/NetworkPortWatcher.h
- src/devices/network/NetworkPortWatcher.cpp
- src/devices/platform/linux/UdevMonitor.h
- src/devices/platform/linux/UdevMonitor.cpp
- src/devices/platform/linux/LinuxDeviceUtils.h
- src/devices/platform/windows/WinDeviceMonitor.h
- src/devices/platform/windows/WinDeviceMonitor.cpp
- src/devices/platform/windows/WinDeviceUtils.h
- src/can_manager/can_manager.h
- src/can_manager/can_manager.cpp
- mainwindow.h
- mainwindow.cpp
- src/toolbar/toolbar.h src/toolbar/toolbar.cpp
- resource.qrc
- src/view_core/viewcore.h src/view_core/viewcore.cpp src/view_core/viewcore.ui
- src/view_serial/serialmodule.h src/view_serial/serialmodule.cpp
- src/view_serial/serialdockpage.h src/view_serial/serialdockpage.cpp
- src/view_serial/serial_settings_widget.h src/view_serial/serial_settings_widget.cpp src/view_serial/serial_settings_widget.ui
- src/view_can/viewcan.h src/view_can/viewcan.cpp src/view_can/viewcan.ui
- src/view_can/can_data_widget.h src/view_can/can_data_widget.cpp src/view_can/can_data_widget.ui
- src/device_config/device_tree_widget.h src/device_config/device_tree_widget.cpp src/device_config/device_tree_widget.ui
- src/libmodbus/modbus_config_widget.h src/libmodbus/modbus_config_widget.cpp src/libmodbus/modbus_config_widget.ui
- src/libmodbus/src/modbus.c src/libmodbus/src/modbus-data.c
- src/libmodbus/src/modbus-rtu.c src/libmodbus/src/modbus-tcp.c
- src/view_serial/serial_data_widget.h src/view_serial/serial_data_widget.cpp src/view_serial/serial_data_widget.ui
- src/message_viewer/raw_data_table_widget.h src/message_viewer/raw_data_table_widget.cpp src/message_viewer/raw_data_table_widget.ui
- src/message_viewer/bus_data_table_widget.h src/message_viewer/bus_data_table_widget.cpp src/message_viewer/bus_data_table_widget.ui
- src/message_viewer/message_viewer_widget.h src/message_viewer/message_viewer_widget.cpp
- src/my_dock_manager/mdockmanager.cpp src/my_dock_manager/mdockmanager.h
- src/database_manager/database_types.h
- src/database_manager/databaseconnectiondock.h src/database_manager/databaseconnectiondock.cpp
- src/database_manager/databasepage.h src/database_manager/databasepage.cpp src/database_manager/databasepage.ui
- src/database_manager/databasemodule.h src/database_manager/databasemodule.cpp
- src/database_manager/databasesearchdialog.h src/database_manager/databasesearchdialog.cpp src/database_manager/databasesearchdialog.ui
- )
- # 关键修改:链接ADS库(使用目标名称)
- if(Qt6_VERSION_MAJOR EQUAL 6)
- target_link_libraries(soft_bus PRIVATE ads::qtadvanceddocking-qt6)
- else()
- target_link_libraries(soft_bus PRIVATE ads::qtadvanceddocking-qt5)
- endif()
- # 设置CAN API库路径
- set(CAN_API_DIR "${PROJECT_SOURCE_DIR}/libs/can_api")
- # 转换为绝对路径以确保链接器能找到库
- get_filename_component(CAN_API_LIB "${CAN_API_DIR}/lib/lib_emuc2_64.a" ABSOLUTE)
- # 验证库文件是否存在
- if(NOT EXISTS "${CAN_API_LIB}")
- message(FATAL_ERROR "CAN API library not found: ${CAN_API_LIB}")
- endif()
- # 创建导入的静态库目标
- add_library(emuc2_static STATIC IMPORTED)
- set_target_properties(emuc2_static PROPERTIES
- IMPORTED_LOCATION "${CAN_API_LIB}"
- )
- # 链接其他库
- # 注意:静态库的链接顺序很重要
- # CAN API库将在Linux部分通过target_link_options使用--whole-archive方式链接
- target_link_libraries(soft_bus
- PRIVATE
- Qt6::Core
- Qt6::Widgets
- Qt6::SerialPort
- Qt6::Charts
- Qt6::Sql
- pthread
- )
- if(WIN32)
- target_link_libraries(soft_bus
- PRIVATE
- shlwapi
- rpcrt4
- ws2_32 # Winsock 库
- advapi32 # 高级服务库
- user32 # 用户界面库
- gdi32 # 图形设备接口
- ole32 # OLE 库
- oleaut32 # OLE 自动化
- uuid # UUID 支持
- "${CAN_API_LIB}" # Windows下直接链接
- )
- else()
- # 查找 zlib 库
- find_package(ZLIB REQUIRED)
- # 在链接库时加入 zlib 库
- if(ZLIB_FOUND)
- target_link_libraries(soft_bus PRIVATE ${ZLIB_LIBRARIES})
- endif()
- # 查找并链接 libudev 用于设备热插拔监控
- find_library(UDEV_LIB udev REQUIRED)
- if(UDEV_LIB)
- target_link_libraries(soft_bus PRIVATE ${UDEV_LIB})
- endif()
- # 添加CAN API库目录到链接路径(Linux)
- target_link_directories(soft_bus PRIVATE "${CAN_API_DIR}/lib")
-
- # 链接CAN API静态库,使用 --whole-archive 确保所有符号都被链接
- # 直接在 target_link_libraries 中混合使用选项和库文件,CMake 会保持顺序
- target_link_libraries(soft_bus PRIVATE
- "-Wl,--whole-archive"
- "${CAN_API_LIB}"
- "-Wl,--no-whole-archive"
- )
- endif()
- # 添加包含路径
- target_include_directories(soft_bus PRIVATE
- ${PROJECT_SOURCE_DIR}/src
- ${ADS_DIR}/src # ADS头文件路径
- ${PROJECT_SOURCE_DIR}/src/libmodbus/src # libmodbus库头文件路径
- ${CAN_API_DIR}/include # CAN API头文件路径
- )
- # 安装配置
- include(GNUInstallDirs)
- install(TARGETS soft_bus
- BUNDLE DESTINATION .
- RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
- LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
- )
- qt_generate_deploy_app_script(
- TARGET soft_bus
- OUTPUT_SCRIPT deploy_script
- NO_UNSUPPORTED_PLATFORM_ERROR
- )
- install(SCRIPT ${deploy_script})
|