123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- #这里需要区分Qt版本,因此要放到find_package(qt)之后
- message(STATUS "***** Find qmqtt.cmake *****")
- # 0. 定义qmqtt版本
- # 1. 指定头文件路径
- unset(QMQTT_INCLUDE_DIR CACHE)
- unset(QMQTT_LIBRARY CACHE)
- unset(INCLUDE_DIR CACHE)
- find_path(INCLUDE_DIR
- NAMES qmqtt.h
- PATHS ${CMAKE_CURRENT_LIST_DIR}/inc
- NO_DEFAULT_PATH
- )
- list(APPEND QMQTT_INCLUDE_DIR ${INCLUDE_DIR})
- unset(INCLUDE_DIR CACHE)
- find_path(INCLUDE_DIR
- NAMES MQTTBase.h
- PATHS ${CMAKE_CURRENT_LIST_DIR}/mqttBase
- NO_DEFAULT_PATH
- )
- list(APPEND QMQTT_INCLUDE_DIR ${INCLUDE_DIR})
- #添加源文件
- unset(QMQTT_SOURCES CACHE)
- find_path(INCLUDE_DIR
- NAMES MQTTBase.cpp
- PATHS ${CMAKE_CURRENT_LIST_DIR}/mqttBase
- NO_DEFAULT_PATH
- )
- list(APPEND QMQTT_SOURCES ${INCLUDE_DIR}/MQTTBase.cpp)
- #区分Qt版本
- if(QT_VERSION_MAJOR EQUAL 5)
- # message(STATUS "----------------Qt Version : ${Qt5Core_VERSION}")
- if(${Qt5Core_VERSION} VERSION_LESS 5.15.0 AND ${Qt5Core_VERSION} VERSION_GREATER 5.12.0)
- set(QtVersion 5.12)
- elseif(${Qt5Core_VERSION} VERSION_GREATER_EQUAL 5.15.0)
- set(QtVersion 5.15)
- endif()
-
- elseif(QT_VERSION_MAJOR EQUAL 6)
- message(STATUS "Qt Version : ${Qt6Core_VERSION}")
- message(STATUS "qmqtt not support Qt6")
- endif()
- # 2. 直接指定库文件,区分gcc,msvc,debug和release
- unset(QMQTT_LIBRARY CACHE)
- if(CMAKE_SYSTEM_NAME MATCHES "Windows")
- if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
- if(QtVersion STREQUAL "5.12")
- if(CMAKE_BUILD_TYPE STREQUAL "Debug")
- list(APPEND QMQTT_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/lib/gcc/5.12.12/Qt5Qmqttd.dll)
- else()
- list(APPEND QMQTT_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/lib/gcc/5.12.12/Qt5Qmqtt.dll)
- endif()
- elseif(QtVersion STREQUAL "5.15")
- if(CMAKE_BUILD_TYPE STREQUAL "Debug")
- list(APPEND QMQTT_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/lib/gcc/5.15.2/debug/Qt5Qmqtt.dll)
- else()
- list(APPEND QMQTT_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/lib/gcc/5.15.2/release/Qt5Qmqtt.dll)
- endif()
- endif()
- elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
- # message(STATUS "MSVC")
- if(QtVersion STREQUAL "5.12")
- if(CMAKE_BUILD_TYPE STREQUAL "Debug")
- list(APPEND QMQTT_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/lib/msvc/5.12.12/Qt5Qmqttd.lib)
- else()
- list(APPEND QMQTT_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/lib/msvc/5.12.12/Qt5Qmqtt.lib)
- endif(CMAKE_BUILD_TYPE STREQUAL "Debug")
-
- elseif(QtVersion STREQUAL "5.15")
- if(CMAKE_BUILD_TYPE STREQUAL "Debug")
- list(APPEND QMQTT_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/lib/msvc/5.15.2/Qt5Qmqttd.lib)
- else()
- list(APPEND QMQTT_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/lib/msvc/5.15.2/Qt5Qmqtt.lib)
- endif()
- endif()
- endif()
- #添加Linux库
- elseif(CMAKE_SYSTEM_NAME MATCHES "Linux")
- # message(STATUS "Using ${CMAKE_SYSTEM_NAME} System")
- if(QtVersion STREQUAL "5.12")
- if(CMAKE_BUILD_TYPE STREQUAL "Debug")
- list(APPEND QMQTT_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/lib/linux_gcc8.3/5.12.12/debug/libQt5Qmqtt.so)
- else()
- list(APPEND QMQTT_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/lib/linux_gcc8.3/5.12.12/release/libQt5Qmqtt.so)
- endif()
- elseif(QtVersion STREQUAL "5.15")
- if(CMAKE_BUILD_TYPE STREQUAL "Debug")
- list(APPEND QMQTT_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/lib/linux_gcc8.3/5.15.14/debug/libQt5Qmqtt.so)
- else()
- list(APPEND QMQTT_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/lib/linux_gcc8.3/5.15.14/debug/libQt5Qmqtt.so)
- endif()
- endif()
- endif()
- # message("Include: " ${QMQTT_INCLUDE_DIR})
- # message("Library: " ${QMQTT_LIBRARY})
- # 3. 设置查找到了变量
- if(QMQTT_INCLUDE_DIR AND QMQTT_LIBRARY)
- set(QMQTT_FOUND TRUE)
- set(QMQTT_VERSION 1.0.3)
- # message(STATUS "qmqtt Version : ${QMQTT_VERSION}")
- # message(STATUS "include : QMQTT_INCLUDE_DIR")
- # message(STATUS "Library : QMQTT_LIBRARY")
- # message(STATUS "Sources : QMQTT_SOURCES")
- message(STATUS "target_link_libraries(YourTarget PRIVATE External::qmqtt)")
- else()
- set(QMQTT_FOUND FALSE)
- endif()
- message(STATUS "qmqtt Found : ${QMQTT_FOUND}")
- message(STATUS "qmqtt Version : ${QMQTT_VERSION}")
- message(STATUS "--------------------------------------------------")
- #导入目标
- if(QMQTT_FOUND)
- if(NOT TARGET External::qmqtt)
- add_library(External::qmqtt UNKNOWN IMPORTED)
- #添加头文件
- set_target_properties(External::qmqtt PROPERTIES
- INTERFACE_INCLUDE_DIRECTORIES "${QMQTT_INCLUDE_DIR}")
- #添加库文件
- set_target_properties(External::qmqtt PROPERTIES
- IMPORTED_LOCATION "${QMQTT_LIBRARY}")
- #添加spdlog需要的依赖库
- # set_target_properties(External::qmqtt PROPERTIES
- # INTERFACE_LINK_LIBRARIES "pthread")
- #添加源文件
- set_target_properties(External::qmqtt PROPERTIES
- INTERFACE_SOURCES "${QMQTT_SOURCES}")
- endif()
- endif()
- # 标记这些变量为高级变量
- mark_as_advanced(
- QMQTT_INCLUDE_DIR
- QMQTT_LIBRARY
- QMQTT_SOURCES
- )
|