Findspdlog.cmake 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  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. #64位
  20. if(CMAKE_SIZEOF_VOID_P EQUAL 8)
  21. if(CMAKE_BUILD_TYPE MATCHES "Debug")
  22. list(APPEND spdlog_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/windows/gcc7.3/libspdlogd.dll)
  23. else()
  24. list(APPEND spdlog_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/windows/gcc7.3/libspdlog.dll)
  25. endif()
  26. if(ENABLE_SPDLOG_STATIC_LIB)
  27. if(CMAKE_BUILD_TYPE MATCHES "Debug")
  28. list(APPEND spdlog_STATIC_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/windows/gcc7.3_static/libspdlogd.a)
  29. else()
  30. list(APPEND spdlog_STATIC_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/windows/gcc7.3_static/libspdlog.a)
  31. endif()
  32. endif()
  33. #32位
  34. elseif(CMAKE_SIZEOF_VOID_P EQUAL 4)
  35. #动态库
  36. if(CMAKE_BUILD_TYPE MATCHES "Debug")
  37. list(APPEND spdlog_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/windows/gcc7.3_32/libspdlogd.dll)
  38. else()
  39. list(APPEND spdlog_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/windows/gcc7.3_32/libspdlog.dll)
  40. endif()
  41. #静态库
  42. if(ENABLE_SPDLOG_STATIC_LIB)
  43. if(CMAKE_BUILD_TYPE MATCHES "Debug")
  44. list(APPEND spdlog_STATIC_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/windows/gcc7.3_static_32/libspdlogd.a)
  45. else()
  46. list(APPEND spdlog_STATIC_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/windows/gcc7.3_static_32/libspdlog.a)
  47. endif()
  48. endif()
  49. endif()
  50. elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
  51. if(CMAKE_BUILD_TYPE MATCHES "Debug")
  52. list(APPEND spdlog_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/windows/msvc2022/spdlogd.lib)
  53. else()
  54. list(APPEND spdlog_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/windows/msvc2022/spdlog.lib)
  55. endif()
  56. endif()
  57. #添加Linux版本
  58. elseif(CMAKE_SYSTEM_NAME MATCHES "Linux")
  59. if(CMAKE_BUILD_TYPE MATCHES "Debug")
  60. list(APPEND spdlog_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/linux/gcc8.3/libspdlog.so)
  61. else()
  62. list(APPEND spdlog_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/linux/gcc8.3/libspdlog.so)
  63. endif()
  64. list(APPEND spdlog_LIBRARY pthread)
  65. if(ENABLE_SPDLOG_STATIC_LIB)
  66. if(CMAKE_BUILD_TYPE MATCHES "Debug")
  67. list(APPEND spdlog_STATIC_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/linux/gcc8.3_static/libspdlogd.a)
  68. else()
  69. list(APPEND spdlog_STATIC_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/linux/gcc8.3_static/libspdlog.a)
  70. endif()
  71. #这里需要显式的链接依赖库,或者使用target_link_options(appname PRIVATE "-Wl,--copy-dt-needed-entries")来让gcc递归搜索依赖库
  72. list(APPEND spdlog_STATIC_LIBRARY pthread)
  73. endif()
  74. #MacOS版本
  75. elseif(CMAKE_SYSTEM_NAME MATCHES "Darwin")
  76. #MacOS版本
  77. if(CMAKE_BUILD_TYPE MATCHES "Debug")
  78. list(APPEND spdlog_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/macos/libspdlog.dylib)
  79. else()
  80. list(APPEND spdlog_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/macos/libspdlog.dylib)
  81. endif()
  82. endif()
  83. #设置查找到后的变量
  84. # if(ENABLE_SPDLOG_STATIC_LIB)
  85. # set(spdlog_LIBRARY ${spdlog_STATIC_LIBRARY})
  86. # endif()
  87. # message(STATUS "spdlog_INCLUDE_DIR: ${spdlog_INCLUDE_DIR}")
  88. if(spdlog_INCLUDE_DIR AND (spdlog_LIBRARY OR spdlog_STATIC_LIBRARY))
  89. set(spdlog_FOUND TRUE)
  90. set(spdlog_VERSION 1.14.1)
  91. message(STATUS "如果需要使用静态库,定义“ ENABLE_SPDLOG_STATIC_LIB ”变量")
  92. message(STATUS "include : spdlog_INCLUDE_DIR")
  93. if(spdlog_LIBRARY)
  94. message(STATUS "Library : spdlog_LIBRARY")
  95. endif()
  96. if(ENABLE_SPDLOG_STATIC_LIB)
  97. message(STATUS "Static Library : spdlog_STATIC_LIBRARY")
  98. endif()
  99. else()
  100. set(spdlog_FOUND FALSE)
  101. endif()
  102. message(STATUS "---------------------------------")