Findspdlog.cmake 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. #SPDLOG日志库
  2. message(STATUS "***** Find spdlog Library *****")
  3. #寻找头文件
  4. # find_path(spdlog_INCLUDE_DIR
  5. # NAMES spdlog/logger.h
  6. # PATHS ${CMAKE_CURRENT_LIST_DIR}
  7. # NO_DEFAULT_PATH
  8. # )
  9. unset(spdlog_INCLUDE_DIR CACHE)
  10. list(APPEND spdlog_INCLUDE_DIR ${CMAKE_CURRENT_LIST_DIR}/include)
  11. list(APPEND spdlog_INCLUDE_DIR ${CMAKE_CURRENT_LIST_DIR}/include/spdlog)
  12. #包含fmt头文件,使用fmt的时候包含fmt/bundled/format.h这样的完整目录
  13. list(APPEND spdlog_INCLUDE_DIR ${CMAKE_CURRENT_LIST_DIR}/include/spdlog/fmt)
  14. unset(spdlog_LIBRARY CACHE)
  15. unset(spdlog_STATIC_LIBRARY CACHE)
  16. #查找库文件,需要判断操作系统,位数
  17. if(CMAKE_SYSTEM_NAME MATCHES "Windows")
  18. if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
  19. if(CMAKE_SIZEOF_VOID_P EQUAL 8)
  20. if(CMAKE_BUILD_TYPE MATCHES "Debug")
  21. list(APPEND spdlog_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/windows/gcc7.3/libspdlogd.dll)
  22. else()
  23. list(APPEND spdlog_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/windows/gcc7.3/libspdlog.dll)
  24. endif()
  25. if(ENABLE_SPDLOG_STATIC_LIB)
  26. if(CMAKE_BUILD_TYPE MATCHES "Debug")
  27. list(APPEND spdlog_STATIC_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/windows/gcc7.3_static/libspdlog.a)
  28. else()
  29. list(APPEND spdlog_STATIC_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/windows/gcc7.3_static/libspdlog.a)
  30. endif()
  31. endif()
  32. elseif(CMAKE_SIZEOF_VOID_P EQUAL 4)
  33. # if(CMAKE_BUILD_TYPE MATCHES "Debug")
  34. # list(APPEND spdlog_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/windows/gcc7.3_32/libspdlog.dll)
  35. # else()
  36. # list(APPEND spdlog_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/windows/gcc7.3_32/libspdlog.dll)
  37. # endif()
  38. endif()
  39. elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
  40. if(CMAKE_BUILD_TYPE MATCHES "Debug")
  41. list(APPEND spdlog_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/windows/msvc2022/spdlogd.lib)
  42. else()
  43. list(APPEND spdlog_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/windows/msvc2022/spdlog.lib)
  44. endif()
  45. endif()
  46. #添加Linux版本
  47. elseif(CMAKE_SYSTEM_NAME MATCHES "Linux")
  48. if(CMAKE_BUILD_TYPE MATCHES "Debug")
  49. list(APPEND spdlog_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/linux/gcc8.3/libspdlog.so)
  50. else()
  51. list(APPEND spdlog_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/linux/gcc8.3/libspdlog.so)
  52. endif()
  53. list(APPEND spdlog_LIBRARY pthread)
  54. if(ENABLE_SPDLOG_STATIC_LIB)
  55. if(CMAKE_BUILD_TYPE MATCHES "Debug")
  56. list(APPEND spdlog_STATIC_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/linux/gcc8.3_static/libspdlogd.a)
  57. else()
  58. list(APPEND spdlog_STATIC_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/linux/gcc8.3_static/libspdlog.a)
  59. endif()
  60. #这里需要显式的链接依赖库,或者使用target_link_options(appname PRIVATE "-Wl,--copy-dt-needed-entries")来让gcc递归搜索依赖库
  61. list(APPEND spdlog_STATIC_LIBRARY pthread)
  62. endif()
  63. #MacOS版本
  64. elseif(CMAKE_SYSTEM_NAME MATCHES "Darwin")
  65. #MacOS版本
  66. if(CMAKE_BUILD_TYPE MATCHES "Debug")
  67. list(APPEND spdlog_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/macos/libspdlog.dylib)
  68. else()
  69. list(APPEND spdlog_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/macos/libspdlog.dylib)
  70. endif()
  71. endif()
  72. #设置查找到后的变量
  73. # if(ENABLE_SPDLOG_STATIC_LIB)
  74. # set(spdlog_LIBRARY ${spdlog_STATIC_LIBRARY})
  75. # endif()
  76. # message(STATUS "spdlog_INCLUDE_DIR: ${spdlog_INCLUDE_DIR}")
  77. if(spdlog_INCLUDE_DIR AND spdlog_LIBRARY)
  78. set(spdlog_FOUND TRUE)
  79. set(spdlog_VERSION 1.14.1)
  80. message(STATUS "如果需要使用静态库,定义“ ENABLE_SPDLOG_STATIC_LIB ”变量")
  81. if(ENABLE_SPDLOG_STATIC_LIB)
  82. message(STATUS "include : spdlog_INCLUDE_DIR")
  83. message(STATUS "Library : spdlog_LIBRARY")
  84. message(STATUS "Static Library : spdlog_STATIC_LIBRARY")
  85. else()
  86. message(STATUS "include : spdlog_INCLUDE_DIR")
  87. message(STATUS "Library : spdlog_LIBRARY")
  88. endif()
  89. else()
  90. set(spdlog_FOUND FALSE)
  91. endif()
  92. message(STATUS "---------------------------------")