cmake_minimum_required(VERSION 3.10) # 雷达数据处理动态链接库 # 开发环境已由 Qt/qmake 迁移到 VS Code + CMake。 # 编译器保持为 Microsoft Visual C++ Compiler 12.0 (x86)。 project(data_process_class_dll LANGUAGES CXX) # 扫描模式: # PHASE_SCANNING -> 相扫雷达(X256_PS,原 Qt 工程默认激活配置) # MECHANICAL_SCANNING -> 机扫雷达(X256_MS) # 用法:cmake -S . -B build -DRADAR_SCAN_MODE=PHASE_SCANNING set(RADAR_SCAN_MODE "PHASE_SCANNING" CACHE STRING "Radar scan mode (PHASE_SCANNING or MECHANICAL_SCANNING)") set_property(CACHE RADAR_SCAN_MODE PROPERTY STRINGS PHASE_SCANNING MECHANICAL_SCANNING) if(NOT RADAR_SCAN_MODE STREQUAL "PHASE_SCANNING" AND NOT RADAR_SCAN_MODE STREQUAL "MECHANICAL_SCANNING") message(FATAL_ERROR "RADAR_SCAN_MODE 必须为 PHASE_SCANNING 或 MECHANICAL_SCANNING,当前值:${RADAR_SCAN_MODE}") endif() # 导出编译命令,便于 VS Code C/C++ 插件 IntelliSense 使用。 # Visual Studio 生成器不支持该选项,因此仅对 Makefile/Ninja 生成器开启。 if(NOT CMAKE_GENERATOR MATCHES "Visual Studio") set(CMAKE_EXPORT_COMPILE_COMMANDS ON) endif() set(SOURCES data_process_class_dll/rdp_log.cpp data_process_class_dll/data_process_class_dll.cpp data_process_class_dll/data_process.cpp data_process_class_dll/dot_coh.cpp data_process_class_dll/kalman.cpp data_process_class_dll/coor_trans.cpp data_process_class_dll/track_asso.cpp data_process_class_dll/track_init.cpp data_process_class_dll/track_index_mangement.cpp data_process_class_dll/tas_ctrl.cpp data_process_class_dll/track_die.cpp data_process_class_dll/dot_coh_tas.cpp data_process_class_dll/track_asso_tas.cpp data_process_class_dll/track_init_direct_tracking.cpp data_process_class_dll/track_die_tas.cpp ) set(PUBLIC_HEADERS data_process_class_dll/data_process_class_dll.h data_process_class_dll/data_process_class_dll_global.h ) add_library(data_process_class_dll SHARED ${SOURCES}) # 编译 DLL 时定义导出宏;引用 DLL 的工程不应定义该宏。 target_compile_definitions(data_process_class_dll PRIVATE DATA_PROCESS_CLASS_DLL_LIBRARY ${RADAR_SCAN_MODE} ) # 与 qmake 工程保持一致的 Windows 编译定义 if(WIN32) target_compile_definitions(data_process_class_dll PRIVATE WIN32 _WINDOWS _UNICODE UNICODE NOMINMAX ) endif() # Eigen 头文件位于源码目录下()。 target_include_directories(data_process_class_dll PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/data_process_class_dll ) # 原工程使用 MSVC 2013(Visual Studio 12)编译器;保持兼容,不强制更高 C++ 标准。 # 源码使用 C++11 特性(nullptr、类内成员初始化等),MSVC 2013 默认即可支持。 if(MSVC) # 与原 qmake 生成的编译选项保持一致。 # 注意:MSVC 2013 的 Debug 运行库与 /Zc:strictStrings 同时使用会触发 STL 编译错误, # 原 qmake 工程也仅在 Release 配置中使用该选项。 target_compile_options(data_process_class_dll PRIVATE /Zc:wchar_t /FS $<$:/Zc:strictStrings> ) # 修复 C4819(源文件含当前代码页无法表示的字符)。 # /utf-8 从 VS2015 Update 2 开始支持;本工程使用 MSVC 2013 时无该选项, # 通过为源码文件添加 UTF-8 BOM 解决 C4819,这里仅对支持 /utf-8 的新版 MSVC 开启。 if(MSVC_VERSION GREATER_EQUAL 1900) target_compile_options(data_process_class_dll PRIVATE /utf-8) endif() endif() # 输出目录:build/bin 下为 DLL/PDB,build/lib 下为导入库。 set_target_properties(data_process_class_dll PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin" ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin" PUBLIC_HEADER "${PUBLIC_HEADERS}" ) # 安装规则:DLL/导入库 -> bin/lib,公开头文件 -> include。 include(GNUInstallDirs) install(TARGETS data_process_class_dll RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} )