Findqmqtt.cmake 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. #这里需要区分Qt版本,因此要放到find_package(qt)之后
  2. message(STATUS "***** Find qmqtt.cmake *****")
  3. # 0. 定义qmqtt版本
  4. # 1. 指定头文件路径
  5. unset(QMQTT_INCLUDE_DIR CACHE)
  6. unset(QMQTT_LIBRARY CACHE)
  7. unset(INCLUDE_DIR CACHE)
  8. find_path(INCLUDE_DIR
  9. NAMES qmqtt.h
  10. PATHS ${CMAKE_CURRENT_LIST_DIR}/inc
  11. NO_DEFAULT_PATH
  12. )
  13. list(APPEND QMQTT_INCLUDE_DIR ${INCLUDE_DIR})
  14. unset(INCLUDE_DIR CACHE)
  15. find_path(INCLUDE_DIR
  16. NAMES MQTTBase.h
  17. PATHS ${CMAKE_CURRENT_LIST_DIR}/mqttBase
  18. NO_DEFAULT_PATH
  19. )
  20. list(APPEND QMQTT_INCLUDE_DIR ${INCLUDE_DIR})
  21. #添加源文件
  22. unset(QMQTT_SOURCES CACHE)
  23. find_path(INCLUDE_DIR
  24. NAMES MQTTBase.cpp
  25. PATHS ${CMAKE_CURRENT_LIST_DIR}/mqttBase
  26. NO_DEFAULT_PATH
  27. )
  28. list(APPEND QMQTT_SOURCES ${INCLUDE_DIR}/MQTTBase.cpp)
  29. #区分Qt版本
  30. if(QT_VERSION_MAJOR EQUAL 5)
  31. # message(STATUS "----------------Qt Version : ${Qt5Core_VERSION}")
  32. if(${Qt5Core_VERSION} VERSION_LESS 5.15.0 AND ${Qt5Core_VERSION} VERSION_GREATER 5.12.0)
  33. set(QtVersion 5.12)
  34. elseif(${Qt5Core_VERSION} VERSION_GREATER_EQUAL 5.15.0)
  35. set(QtVersion 5.15)
  36. endif()
  37. elseif(QT_VERSION_MAJOR EQUAL 6)
  38. message(STATUS "Qt Version : ${Qt6Core_VERSION}")
  39. message(STATUS "qmqtt not support Qt6")
  40. endif()
  41. # 2. 直接指定库文件,区分gcc,msvc,debug和release
  42. unset(QMQTT_LIBRARY CACHE)
  43. if(CMAKE_SYSTEM_NAME MATCHES "Windows")
  44. if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
  45. if(QtVersion STREQUAL "5.12")
  46. #区分64位和32位
  47. if(CMAKE_SIZEOF_VOID_P EQUAL 8)
  48. # message(STATUS "GCC 64bit")
  49. if(CMAKE_BUILD_TYPE STREQUAL "Debug")
  50. list(APPEND QMQTT_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/lib/gcc/5.12.12/Qt5Qmqttd.dll)
  51. else()
  52. list(APPEND QMQTT_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/lib/gcc/5.12.12/Qt5Qmqtt.dll)
  53. endif()
  54. else()
  55. # message(STATUS "GCC 32bit")
  56. if(CMAKE_BUILD_TYPE STREQUAL "Debug")
  57. list(APPEND QMQTT_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/lib/gcc73_32/Qt5Qmqttd.dll)
  58. else()
  59. list(APPEND QMQTT_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/lib/gcc73_32/Qt5Qmqtt.dll)
  60. endif()
  61. endif()
  62. elseif(QtVersion STREQUAL "5.15")
  63. if(CMAKE_BUILD_TYPE STREQUAL "Debug")
  64. list(APPEND QMQTT_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/lib/gcc/5.15.2/debug/Qt5Qmqtt.dll)
  65. else()
  66. list(APPEND QMQTT_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/lib/gcc/5.15.2/release/Qt5Qmqtt.dll)
  67. endif()
  68. endif()
  69. elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
  70. # message(STATUS "MSVC")
  71. if(QtVersion STREQUAL "5.12")
  72. if(CMAKE_BUILD_TYPE STREQUAL "Debug")
  73. list(APPEND QMQTT_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/lib/msvc/5.12.12/Qt5Qmqttd.lib)
  74. else()
  75. list(APPEND QMQTT_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/lib/msvc/5.12.12/Qt5Qmqtt.lib)
  76. endif(CMAKE_BUILD_TYPE STREQUAL "Debug")
  77. elseif(QtVersion STREQUAL "5.15")
  78. if(CMAKE_BUILD_TYPE STREQUAL "Debug")
  79. list(APPEND QMQTT_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/lib/msvc/5.15.2/Qt5Qmqttd.lib)
  80. else()
  81. list(APPEND QMQTT_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/lib/msvc/5.15.2/Qt5Qmqtt.lib)
  82. endif()
  83. endif()
  84. endif()
  85. #添加Linux库
  86. elseif(CMAKE_SYSTEM_NAME MATCHES "Linux")
  87. # message(STATUS "Using ${CMAKE_SYSTEM_NAME} System")
  88. if(QtVersion STREQUAL "5.12")
  89. if(CMAKE_BUILD_TYPE STREQUAL "Debug")
  90. list(APPEND QMQTT_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/lib/linux_gcc8.3/5.12.12/debug/libQt5Qmqtt.so)
  91. else()
  92. list(APPEND QMQTT_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/lib/linux_gcc8.3/5.12.12/release/libQt5Qmqtt.so)
  93. endif()
  94. elseif(QtVersion STREQUAL "5.15")
  95. if(CMAKE_BUILD_TYPE STREQUAL "Debug")
  96. list(APPEND QMQTT_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/lib/linux_gcc8.3/5.15.14/debug/libQt5Qmqtt.so)
  97. else()
  98. list(APPEND QMQTT_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/lib/linux_gcc8.3/5.15.14/debug/libQt5Qmqtt.so)
  99. endif()
  100. endif()
  101. endif()
  102. # message("Include: " ${QMQTT_INCLUDE_DIR})
  103. # message("Library: " ${QMQTT_LIBRARY})
  104. # 3. 设置查找到了变量
  105. if(QMQTT_INCLUDE_DIR AND QMQTT_LIBRARY)
  106. set(QMQTT_FOUND TRUE)
  107. set(QMQTT_VERSION 1.0.3)
  108. # message(STATUS "qmqtt Version : ${QMQTT_VERSION}")
  109. # message(STATUS "include : QMQTT_INCLUDE_DIR")
  110. # message(STATUS "Library : QMQTT_LIBRARY")
  111. # message(STATUS "Sources : QMQTT_SOURCES")
  112. message(STATUS "target_link_libraries(YourTarget PRIVATE External::qmqtt)")
  113. else()
  114. set(QMQTT_FOUND FALSE)
  115. endif()
  116. message(STATUS "qmqtt Found : ${QMQTT_FOUND}")
  117. message(STATUS "qmqtt Version : ${QMQTT_VERSION}")
  118. message(STATUS "--------------------------------------------------")
  119. #导入目标
  120. if(QMQTT_FOUND)
  121. if(NOT TARGET External::qmqtt)
  122. add_library(External::qmqtt UNKNOWN IMPORTED)
  123. #添加头文件
  124. set_target_properties(External::qmqtt PROPERTIES
  125. INTERFACE_INCLUDE_DIRECTORIES "${QMQTT_INCLUDE_DIR}")
  126. #添加库文件
  127. set_target_properties(External::qmqtt PROPERTIES
  128. IMPORTED_LOCATION "${QMQTT_LIBRARY}")
  129. #添加spdlog需要的依赖库
  130. # set_target_properties(External::qmqtt PROPERTIES
  131. # INTERFACE_LINK_LIBRARIES "pthread")
  132. #添加源文件
  133. set_target_properties(External::qmqtt PROPERTIES
  134. INTERFACE_SOURCES "${QMQTT_SOURCES}")
  135. endif()
  136. endif()
  137. # 标记这些变量为高级变量
  138. mark_as_advanced(
  139. QMQTT_INCLUDE_DIR
  140. QMQTT_LIBRARY
  141. QMQTT_SOURCES
  142. )