| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 | 
# SPDLOG库分为1.14.1和1.15.1,1.14.1是使用Qt5.12.12编译的,只能使用在Qt5环境中# 1.15.1是没有带Qt的环境编译的,支持Qt5和Qt6,编译器版本是GCC11.3# 静态库好像不能跨GCC版本使用,链接时会报错,提示找不到符号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}")# message(STATUS "spdlog_LIBRARY: ${spdlog_LIBRARY}")# message(STATUS "spdlog_STATIC_LIBRARY: ${spdlog_STATIC_LIBRARY}")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 "---------------------------------")
 |