使用CMake测试受支持的Qt版本

使用CMake测试受支持的Qt版本,qt,cmake,Qt,Cmake,我正在使用CMake构建一个Qt项目,它使用了一些较新的Qt特性,至少需要5.3版才能正确构建。我希望对那些试图构建项目但在CMake配置时失败的人友好,告诉他们他们的CMake版本不够新,而不是一些深奥的构建错误 我知道,只要使用模块find_-package语法(即find_-package(Qt5Widgets required)),我至少可以获得5.0版,但如何确保使用正确的次要版本还不太明显。 最简单的方法是什么?使用Qt提供的cmake软件包没有直接的方法,但是使用qmake查询Qt

我正在使用CMake构建一个Qt项目,它使用了一些较新的Qt特性,至少需要5.3版才能正确构建。我希望对那些试图构建项目但在CMake配置时失败的人友好,告诉他们他们的CMake版本不够新,而不是一些深奥的构建错误

我知道,只要使用模块
find_-package
语法(即
find_-package(Qt5Widgets required)
),我至少可以获得5.0版,但如何确保使用正确的次要版本还不太明显。
最简单的方法是什么?

使用Qt提供的cmake软件包没有直接的方法,但是使用qmake查询Qt版本非常简单。假设在cmake文件中已经有类似于以下内容的内容来定位Qt安装

set(QTDIR $ENV{QTDIR} CACHE STRING "Qt install path")
list(APPEND CMAKE_PREFIX_PATH ${QTDIR})
如果版本太低,您可以检查版本并使配置步骤失败

set(QT_MINIMUM_VERSION 5.3.0)

# Test for supported Qt version
find_program(QMAKE_EXECUTABLE NAMES qmake HINTS ${QTDIR} ENV QTDIR PATH_SUFFIXES bin)
execute_process(COMMAND ${QMAKE_EXECUTABLE} -query QT_VERSION OUTPUT_VARIABLE QT_VERSION)
if(QT_VERSION LESS QT_MINIMUM_VERSION)
    MESSAGE(FATAL_ERROR "Minimum supported Qt version: ${QT_MINIMUM_VERSION}. 
    Installed version: ${QT_VERSION}")
endif()

我知道这是一篇有点老的帖子,但是你可以使用
Qt5Widgets\u version
检查版本。下面是一些CMake代码示例:

find_package(Qt5Widgets REQUIRED)

if (Qt5Widgets_FOUND)
    if (Qt5Widgets_VERSION VERSION_LESS 5.7.0)
        message(FATAL_ERROR "Minimum supported Qt5 version is 5.70!")
    endif()
else()
    message(SEND_ERROR "The Qt5Widgets library could not be found!")
endif(Qt5Widgets_FOUND)

现在可以将一个版本传递给
查找包
,如下所示:

find_package(Qt5Core 5.10 REQUIRED)
如果找不到兼容版本的Qt5Core,则
find_程序包
调用将失败:

CMake Warning at CMakeLists.txt:15 (find_package):
Could not find a configuration file for package "Qt5Core" that is
compatible with requested version "5.10".

The following configuration files were considered but not accepted:

C:/some/where/lib/cmake/Qt5Core/Qt5CoreConfig.cmake, version: 5.9.4
这一点在