Findspdlog.cmake 6.3 KB

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