更新:1、修改日志组件,使用spdlog日志库;
Signed-off-by: waiwaylee <waiwaylee@foxmail.com>
This commit is contained in:
@@ -50,6 +50,51 @@ else()
|
||||
message(STATUS "数据记录调试功能:关闭(不编译记录模块,RDP_RECORD 为空操作)")
|
||||
endif()
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# 日志编译期级别(spdlog)
|
||||
# 原 parameters.h 的 RDP_LOG_ENABLE 布尔开关已移除:日志级别改由 spdlog 的
|
||||
# SPDLOG_ACTIVE_LEVEL 在编译期控制(低于该级别的 RDP_LOG_* 日志在编译期被
|
||||
# 剔除、实参不求值,OFF 即等价于原「关闭日志模块」)。本缓存变量把级别映射
|
||||
# 到 SPDLOG_ACTIVE_LEVEL,并同时用于 data_process_class_dll 与 rdp_record
|
||||
# 两个目标(两个目标使用同一份 spdlog 头文件配置,必须保持一致)。
|
||||
# AUTO : Debug 构建 = TRACE,其余构建 = INFO(默认)
|
||||
# TRACE / DEBUG / INFO / WARN / ERROR / CRITICAL : 显式指定最低编译级别
|
||||
# OFF : 编译期关闭全部 RDP_LOG_* 日志(rdp_log::Init() 也不再创建日志文件)
|
||||
# 修改方式:cmake -DRDP_LOG_LEVEL=WARN ...(或在 CMakeCache 中修改后重新配置)
|
||||
# ---------------------------------------------------------------------------
|
||||
set(RDP_LOG_LEVEL "AUTO" CACHE STRING "日志编译期级别:AUTO(Debug=TRACE/其它=INFO) / TRACE / DEBUG / INFO / WARN / ERROR / CRITICAL / OFF")
|
||||
set_property(CACHE RDP_LOG_LEVEL PROPERTY STRINGS AUTO TRACE DEBUG INFO WARN ERROR CRITICAL OFF)
|
||||
|
||||
if(RDP_LOG_LEVEL STREQUAL "AUTO")
|
||||
if(CMAKE_CONFIGURATION_TYPES)
|
||||
set(RDP_LOG_ACTIVE_LEVEL_DEFS
|
||||
"$<$<CONFIG:Debug>:SPDLOG_ACTIVE_LEVEL=SPDLOG_LEVEL_TRACE>"
|
||||
"$<$<NOT:$<CONFIG:Debug>>:SPDLOG_ACTIVE_LEVEL=SPDLOG_LEVEL_INFO>")
|
||||
set(RDP_LOG_LEVEL_DESC "AUTO(多配置生成器:Debug=TRACE,其它=INFO)")
|
||||
elseif(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
set(RDP_LOG_ACTIVE_LEVEL_DEFS "SPDLOG_ACTIVE_LEVEL=SPDLOG_LEVEL_TRACE")
|
||||
set(RDP_LOG_LEVEL_DESC "AUTO(Debug 构建 → TRACE)")
|
||||
else()
|
||||
set(RDP_LOG_ACTIVE_LEVEL_DEFS "SPDLOG_ACTIVE_LEVEL=SPDLOG_LEVEL_INFO")
|
||||
if(CMAKE_BUILD_TYPE)
|
||||
set(RDP_LOG_LEVEL_DESC "AUTO(${CMAKE_BUILD_TYPE} 构建 → INFO)")
|
||||
else()
|
||||
set(RDP_LOG_LEVEL_DESC "AUTO(未指定构建类型 → INFO)")
|
||||
endif()
|
||||
endif()
|
||||
elseif(RDP_LOG_LEVEL STREQUAL "OFF")
|
||||
set(RDP_LOG_ACTIVE_LEVEL_DEFS "SPDLOG_ACTIVE_LEVEL=SPDLOG_LEVEL_OFF")
|
||||
set(RDP_LOG_LEVEL_DESC "OFF(编译期关闭全部 RDP_LOG_* 日志)")
|
||||
elseif(RDP_LOG_LEVEL MATCHES "^(TRACE|DEBUG|INFO|WARN|ERROR|CRITICAL)$")
|
||||
set(RDP_LOG_ACTIVE_LEVEL_DEFS "SPDLOG_ACTIVE_LEVEL=SPDLOG_LEVEL_${RDP_LOG_LEVEL}")
|
||||
set(RDP_LOG_LEVEL_DESC "${RDP_LOG_LEVEL}")
|
||||
else()
|
||||
message(FATAL_ERROR
|
||||
"RDP_LOG_LEVEL 必须为 AUTO / TRACE / DEBUG / INFO / WARN / ERROR / CRITICAL / OFF,"
|
||||
"当前值:${RDP_LOG_LEVEL}")
|
||||
endif()
|
||||
message(STATUS "日志编译期级别:${RDP_LOG_LEVEL_DESC}(映射为 SPDLOG_ACTIVE_LEVEL)")
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# 语言标准:C++17
|
||||
# ---------------------------------------------------------------------------
|
||||
@@ -83,6 +128,39 @@ if(NOT CMAKE_GENERATOR MATCHES "Visual Studio")
|
||||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||
endif()
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# 内置第三方库 spdlog(日志,v1.17.0,见 third_party/spdlog/UPSTREAM.md)
|
||||
# 以静态库方式编译(SPDLOG_COMPILED_LIB),供 data_process_class_dll 与
|
||||
# rdp_record(C++20 静态库,rdp_record.cpp 内也有日志)链接:
|
||||
# - PUBLIC 编译定义 SPDLOG_COMPILED_LIB / SPDLOG_ACTIVE_LEVEL 与头文件
|
||||
# 目录,保证所有使用方(含跨 C++17/C++20 的两目标)配置一致;
|
||||
# - SPDLOG_ACTIVE_LEVEL 由上方 RDP_LOG_LEVEL 决定;
|
||||
# - 第三方源码以 /w 编译,维持本项目 /W3 零告警约定(见 README 4.5)。
|
||||
# ---------------------------------------------------------------------------
|
||||
set(SPDLOG_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/third_party/spdlog")
|
||||
|
||||
add_library(spdlog STATIC
|
||||
third_party/spdlog/src/spdlog.cpp
|
||||
third_party/spdlog/src/async.cpp
|
||||
third_party/spdlog/src/cfg.cpp
|
||||
third_party/spdlog/src/color_sinks.cpp
|
||||
third_party/spdlog/src/file_sinks.cpp
|
||||
third_party/spdlog/src/stdout_sinks.cpp
|
||||
third_party/spdlog/src/bundled_fmtlib_format.cpp
|
||||
)
|
||||
target_include_directories(spdlog PUBLIC ${SPDLOG_ROOT}/include)
|
||||
target_compile_definitions(spdlog PUBLIC
|
||||
SPDLOG_COMPILED_LIB
|
||||
${RDP_LOG_ACTIVE_LEVEL_DEFS}
|
||||
)
|
||||
if(MSVC)
|
||||
target_compile_options(spdlog PRIVATE /w /utf-8 /Zc:__cplusplus /Zc:wchar_t /FS)
|
||||
endif()
|
||||
set_target_properties(spdlog PROPERTIES
|
||||
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
|
||||
)
|
||||
message(STATUS "第三方日志库:spdlog v1.17.0(静态库,third_party/spdlog)")
|
||||
|
||||
set(SOURCES
|
||||
data_process_class_dll/rdp_log.cpp
|
||||
data_process_class_dll/data_process_class_dll.cpp
|
||||
@@ -109,6 +187,11 @@ set(PUBLIC_HEADERS
|
||||
|
||||
add_library(data_process_class_dll SHARED ${SOURCES})
|
||||
|
||||
# 日志库(静态库 spdlog):
|
||||
# 目标级 PUBLIC 接口提供 spdlog 头文件目录、SPDLOG_COMPILED_LIB 与 SPDLOG_ACTIVE_LEVEL,
|
||||
# 使 rdp_log.cpp 及各业务模块(RDP_LOG_* 宏)以一致的配置编译。
|
||||
target_link_libraries(data_process_class_dll PRIVATE spdlog)
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# 数据记录模块(RDP_DATA_RECORD 启用时构建):独立静态库、C++20(ormpp 要求),
|
||||
# 与雷达处理代码(C++17)通过 rdp_record.h 的「仅声明 + 显式实例化」跨标准边界。
|
||||
@@ -151,6 +234,10 @@ if(RDP_RECORD_ENABLED)
|
||||
set_source_files_properties(third_party/ormpp/thirdparty/sqlite3/sqlite3.c
|
||||
PROPERTIES COMPILE_OPTIONS "/w")
|
||||
|
||||
# rdp_record.cpp 内的 RDP_LOG_* 日志经 rdp_log.h 使用 spdlog:
|
||||
# 链接 spdlog 目标以获得其 PUBLIC 头文件目录与 SPDLOG_COMPILED_LIB /
|
||||
# SPDLOG_ACTIVE_LEVEL 定义(与 DLL 目标保持一致)。
|
||||
target_link_libraries(rdp_record PRIVATE spdlog)
|
||||
target_link_libraries(data_process_class_dll PRIVATE rdp_record)
|
||||
endif()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user