#这里需要区分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 )