123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- #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 "---------------------------------")
|