Findspdlog.cmake 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. #SPDLOG日志库,Qt5使用1.14.1,Qt6使用1.15.1,不包含Qt则使用1.15.1
  2. #Qt5使用1.15.1会报错,Qt6使用1.14.1会报错,不知道为何
  3. message(STATUS "***** Find spdlog Library *****")
  4. #设置版本号
  5. if(Qt5_FOUND)
  6. set(SPDLOG_V 1.14.1)
  7. elseif(Qt6_FOUND)
  8. set(SPDLOG_V 1.15.1)
  9. else()
  10. set(SPDLOG_V 1.15.1)
  11. endif()
  12. #寻找头文件,现在需要区分Qt版本了,Qt5使用1.14.1,Qt6使用1.15.1,不包含Qt则使用1.15.1
  13. unset(spdlog_INCLUDE_DIR CACHE)
  14. unset(SPDLOG_INC_DIR CACHE)
  15. if(Qt5_FOUND)
  16. set(SPDLOG_INC_DIR ${CMAKE_CURRENT_LIST_DIR}/include_1.14.1)
  17. elseif(Qt6_FOUND)
  18. set(SPDLOG_INC_DIR ${CMAKE_CURRENT_LIST_DIR}/include_1.15.1)
  19. else()
  20. set(SPDLOG_INC_DIR ${CMAKE_CURRENT_LIST_DIR}/include_1.15.1)
  21. endif()
  22. list(APPEND spdlog_INCLUDE_DIR ${SPDLOG_INC_DIR})
  23. list(APPEND spdlog_INCLUDE_DIR ${SPDLOG_INC_DIR}/spdlog)
  24. #包含fmt头文件,使用fmt的时候包含fmt/bundled/format.h这样的完整目录
  25. list(APPEND spdlog_INCLUDE_DIR ${SPDLOG_INC_DIR}/spdlog/fmt)
  26. unset(spdlog_LIBRARY CACHE)
  27. unset(spdlog_STATIC_LIBRARY CACHE)
  28. unset(SPDLOG_LIB_DIR CACHE)
  29. #查找库文件,需要判断操作系统,位数
  30. if(CMAKE_SYSTEM_NAME MATCHES "Windows")
  31. #GCC编译器
  32. if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
  33. #64位
  34. if(CMAKE_SIZEOF_VOID_P EQUAL 8)
  35. #Qt5版本
  36. if(Qt5_FOUND)
  37. set(SPDLOG_LIB_DIR ${CMAKE_CURRENT_LIST_DIR}/windows/gcc7.3)
  38. #Qt6版本
  39. elseif(Qt6_FOUND)
  40. set(SPDLOG_LIB_DIR ${CMAKE_CURRENT_LIST_DIR}/windows/gcc11.2)
  41. #没有Qt版本
  42. else()
  43. set(SPDLOG_LIB_DIR ${CMAKE_CURRENT_LIST_DIR}/windows/gcc11.2)
  44. endif()
  45. #动态库
  46. if(CMAKE_BUILD_TYPE MATCHES "Debug")
  47. list(APPEND spdlog_LIBRARY ${SPDLOG_LIB_DIR}/libspdlogd.dll)
  48. else()
  49. list(APPEND spdlog_LIBRARY ${SPDLOG_LIB_DIR}/libspdlog.dll)
  50. endif()
  51. #静态库
  52. if(ENABLE_SPDLOG_STATIC_LIB)
  53. if(CMAKE_BUILD_TYPE MATCHES "Debug")
  54. list(APPEND spdlog_STATIC_LIBRARY ${SPDLOG_LIB_DIR}/libspdlogd.a)
  55. else()
  56. list(APPEND spdlog_STATIC_LIBRARY ${SPDLOG_LIB_DIR}/libspdlog.a)
  57. endif()
  58. endif()
  59. #32位
  60. elseif(CMAKE_SIZEOF_VOID_P EQUAL 4)
  61. set(SPDLOG_LIB_DIR ${CMAKE_CURRENT_LIST_DIR}/windows/gcc7.3_32)
  62. #动态库
  63. if(CMAKE_BUILD_TYPE MATCHES "Debug")
  64. list(APPEND spdlog_LIBRARY ${SPDLOG_LIB_DIR}/libspdlogd.dll)
  65. else()
  66. list(APPEND spdlog_LIBRARY ${SPDLOG_LIB_DIR}/libspdlog.dll)
  67. endif()
  68. #静态库
  69. if(ENABLE_SPDLOG_STATIC_LIB)
  70. if(CMAKE_BUILD_TYPE MATCHES "Debug")
  71. list(APPEND spdlog_STATIC_LIBRARY ${SPDLOG_LIB_DIR}/libspdlogd.a)
  72. else()
  73. list(APPEND spdlog_STATIC_LIBRARY ${SPDLOG_LIB_DIR}/libspdlog.a)
  74. endif()
  75. endif()
  76. endif()
  77. #MSVC编译器
  78. elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
  79. set(SPDLOG_LIB_DIR ${CMAKE_CURRENT_LIST_DIR}/windows/msvc2022)
  80. if(CMAKE_BUILD_TYPE MATCHES "Debug")
  81. list(APPEND spdlog_LIBRARY ${SPDLOG_LIB_DIR}/spdlogd.lib)
  82. else()
  83. list(APPEND spdlog_LIBRARY ${SPDLOG_LIB_DIR}/spdlog.lib)
  84. endif()
  85. endif()
  86. #添加Linux版本
  87. elseif(CMAKE_SYSTEM_NAME MATCHES "Linux")
  88. set(SPDLOG_LIB_DIR ${CMAKE_CURRENT_LIST_DIR}/linux/gcc8.3)
  89. if(CMAKE_BUILD_TYPE MATCHES "Debug")
  90. list(APPEND spdlog_LIBRARY ${SPDLOG_LIB_DIR}/libspdlogd.so)
  91. else()
  92. list(APPEND spdlog_LIBRARY ${SPDLOG_LIB_DIR}/libspdlog.so)
  93. endif()
  94. list(APPEND spdlog_LIBRARY pthread)
  95. if(ENABLE_SPDLOG_STATIC_LIB)
  96. if(CMAKE_BUILD_TYPE MATCHES "Debug")
  97. list(APPEND spdlog_STATIC_LIBRARY ${SPDLOG_LIB_DIR}/libspdlogd.a)
  98. else()
  99. list(APPEND spdlog_STATIC_LIBRARY ${SPDLOG_LIB_DIR}/libspdlog.a)
  100. endif()
  101. #这里需要显式的链接依赖库,或者使用target_link_options(appname PRIVATE "-Wl,--copy-dt-needed-entries")来让gcc递归搜索依赖库
  102. list(APPEND spdlog_STATIC_LIBRARY pthread)
  103. endif()
  104. #MacOS版本
  105. elseif(CMAKE_SYSTEM_NAME MATCHES "Darwin")
  106. #MacOS版本
  107. if(CMAKE_BUILD_TYPE MATCHES "Debug")
  108. list(APPEND spdlog_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/macos/libspdlog.dylib)
  109. else()
  110. list(APPEND spdlog_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/macos/libspdlog.dylib)
  111. endif()
  112. endif()
  113. #设置查找到后的变量
  114. # if(ENABLE_SPDLOG_STATIC_LIB)
  115. # set(spdlog_LIBRARY ${spdlog_STATIC_LIBRARY})
  116. # endif()
  117. # message(STATUS "spdlog_INCLUDE_DIR: ${spdlog_INCLUDE_DIR}")
  118. if(spdlog_INCLUDE_DIR AND (spdlog_LIBRARY OR spdlog_STATIC_LIBRARY))
  119. set(spdlog_FOUND TRUE)
  120. set(spdlog_VERSION ${SPDLOG_V})
  121. message(STATUS "如果需要使用静态库,定义“ ENABLE_SPDLOG_STATIC_LIB ”变量")
  122. message(STATUS "include : spdlog_INCLUDE_DIR")
  123. if(spdlog_LIBRARY)
  124. message(STATUS "Library : spdlog_LIBRARY")
  125. endif()
  126. if(ENABLE_SPDLOG_STATIC_LIB)
  127. message(STATUS "Static Library : spdlog_STATIC_LIBRARY")
  128. endif()
  129. else()
  130. set(spdlog_FOUND FALSE)
  131. endif()
  132. message(STATUS "---------------------------------")