#SPDLOG日志库,Qt5使用1.14.1,Qt6使用1.15.1,不包含Qt则使用1.15.1 #Qt5使用1.15.1会报错,Qt6使用1.14.1会报错,不知道为何 #勘误,spdlog不是根据Qt版本来的,是gcc编译版本,gcc7.3和gcc11.2版本不兼容 message(STATUS "***** Find spdlog Library *****") #寻找头文件,需要判断gcc编译器版本 unset(spdlog_INCLUDE_DIR CACHE) unset(SPDLOG_INC_DIR CACHE) #判断操作系统 if(CMAKE_SYSTEM_NAME MATCHES "Windows") if(CMAKE_CXX_COMPILER_ID MATCHES "GNU") if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.3) message(STATUS "GCC编译器版本过低,请使用GCC7.3及以上版本") return() elseif(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 11.2 AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 7.2) set(SPDLOG_V 1.14.1) set(SPDLOG_INC_DIR ${CMAKE_CURRENT_LIST_DIR}/include_1.14.1) elseif(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 11.1) set(SPDLOG_V 1.15.1) set(SPDLOG_INC_DIR ${CMAKE_CURRENT_LIST_DIR}/include_1.15.1) endif() elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC") #MSVC编译器 set(SPDLOG_V 1.14.1) set(SPDLOG_INC_DIR ${CMAKE_CURRENT_LIST_DIR}/include_1.14.1) endif() elseif(CMAKE_SYSTEM_NAME MATCHES "Linux") set(SPDLOG_V 1.14.1) set(SPDLOG_INC_DIR ${CMAKE_CURRENT_LIST_DIR}/include_1.14.1) elseif(CMAKE_SYSTEM_NAME MATCHES "Darwin") set(SPDLOG_V 1.14.1) set(SPDLOG_INC_DIR ${CMAKE_CURRENT_LIST_DIR}/include_1.14.1) else() message(STATUS "操作系统:未知") endif() list(APPEND spdlog_INCLUDE_DIR ${SPDLOG_INC_DIR}) list(APPEND spdlog_INCLUDE_DIR ${SPDLOG_INC_DIR}/spdlog) #包含fmt头文件,使用fmt的时候包含fmt/bundled/format.h这样的完整目录 list(APPEND spdlog_INCLUDE_DIR ${SPDLOG_INC_DIR}/spdlog/fmt) unset(spdlog_LIBRARY CACHE) unset(spdlog_STATIC_LIBRARY CACHE) unset(SPDLOG_LIB_DIR CACHE) #查找库文件,需要判断操作系统,位数 if(CMAKE_SYSTEM_NAME MATCHES "Windows") #GCC编译器 if(CMAKE_CXX_COMPILER_ID MATCHES "GNU") #64位 if(CMAKE_SIZEOF_VOID_P EQUAL 8) #GCC7.3版本 if(SPDLOG_V EQUAL 1.14.1) set(SPDLOG_LIB_DIR ${CMAKE_CURRENT_LIST_DIR}/windows/gcc7.3) #GCC11.2版本 elseif(SPDLOG_V EQUAL 1.15.1) set(SPDLOG_LIB_DIR ${CMAKE_CURRENT_LIST_DIR}/windows/gcc11.2) #默认版本 else() set(SPDLOG_LIB_DIR ${CMAKE_CURRENT_LIST_DIR}/windows/gcc11.2) endif() #动态库 if(CMAKE_BUILD_TYPE MATCHES "Debug") list(APPEND spdlog_LIBRARY ${SPDLOG_LIB_DIR}/libspdlogd.dll) else() list(APPEND spdlog_LIBRARY ${SPDLOG_LIB_DIR}/libspdlog.dll) endif() #静态库 if(ENABLE_SPDLOG_STATIC_LIB) if(CMAKE_BUILD_TYPE MATCHES "Debug") list(APPEND spdlog_STATIC_LIBRARY ${SPDLOG_LIB_DIR}/libspdlogd.a) else() list(APPEND spdlog_STATIC_LIBRARY ${SPDLOG_LIB_DIR}/libspdlog.a) endif() endif() #32位 elseif(CMAKE_SIZEOF_VOID_P EQUAL 4) set(SPDLOG_LIB_DIR ${CMAKE_CURRENT_LIST_DIR}/windows/gcc7.3_32) #动态库 if(CMAKE_BUILD_TYPE MATCHES "Debug") list(APPEND spdlog_LIBRARY ${SPDLOG_LIB_DIR}/libspdlogd.dll) else() list(APPEND spdlog_LIBRARY ${SPDLOG_LIB_DIR}/libspdlog.dll) endif() #静态库 if(ENABLE_SPDLOG_STATIC_LIB) if(CMAKE_BUILD_TYPE MATCHES "Debug") list(APPEND spdlog_STATIC_LIBRARY ${SPDLOG_LIB_DIR}/libspdlogd.a) else() list(APPEND spdlog_STATIC_LIBRARY ${SPDLOG_LIB_DIR}/libspdlog.a) endif() endif() endif() #MSVC编译器 elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC") set(SPDLOG_LIB_DIR ${CMAKE_CURRENT_LIST_DIR}/windows/msvc2022) if(CMAKE_BUILD_TYPE MATCHES "Debug") list(APPEND spdlog_LIBRARY ${SPDLOG_LIB_DIR}/spdlogd.lib) else() list(APPEND spdlog_LIBRARY ${SPDLOG_LIB_DIR}/spdlog.lib) endif() endif() #添加Linux版本 elseif(CMAKE_SYSTEM_NAME MATCHES "Linux") set(SPDLOG_LIB_DIR ${CMAKE_CURRENT_LIST_DIR}/linux/gcc8.3) if(CMAKE_BUILD_TYPE MATCHES "Debug") list(APPEND spdlog_LIBRARY ${SPDLOG_LIB_DIR}/libspdlogd.so) else() list(APPEND spdlog_LIBRARY ${SPDLOG_LIB_DIR}/libspdlog.so) endif() list(APPEND spdlog_LIBRARY pthread) if(ENABLE_SPDLOG_STATIC_LIB) if(CMAKE_BUILD_TYPE MATCHES "Debug") list(APPEND spdlog_STATIC_LIBRARY ${SPDLOG_LIB_DIR}/libspdlogd.a) else() list(APPEND spdlog_STATIC_LIBRARY ${SPDLOG_LIB_DIR}/libspdlog.a) endif() #这里需要显式的链接依赖库,或者使用target_link_options(appname PRIVATE "-Wl,--copy-dt-needed-entries")来让gcc递归搜索依赖库 list(APPEND spdlog_STATIC_LIBRARY pthread) endif() #MacOS版本 elseif(CMAKE_SYSTEM_NAME MATCHES "Darwin") #MacOS版本 if(CMAKE_BUILD_TYPE MATCHES "Debug") list(APPEND spdlog_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/macos/libspdlog.dylib) else() list(APPEND spdlog_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/macos/libspdlog.dylib) endif() endif() #设置查找到后的变量 # if(ENABLE_SPDLOG_STATIC_LIB) # set(spdlog_LIBRARY ${spdlog_STATIC_LIBRARY}) # endif() # message(STATUS "spdlog_INCLUDE_DIR: ${spdlog_INCLUDE_DIR}") if(spdlog_INCLUDE_DIR AND (spdlog_LIBRARY OR spdlog_STATIC_LIBRARY)) set(spdlog_FOUND TRUE) set(spdlog_VERSION ${SPDLOG_V}) message(STATUS "如果需要使用静态库,定义“ ENABLE_SPDLOG_STATIC_LIB ”变量") message(STATUS "include : spdlog_INCLUDE_DIR") if(spdlog_LIBRARY) message(STATUS "Library : spdlog_LIBRARY") endif() if(ENABLE_SPDLOG_STATIC_LIB) message(STATUS "Static Library : spdlog_STATIC_LIBRARY") endif() else() set(spdlog_FOUND FALSE) endif() message(STATUS "---------------------------------")