使用CMake测试支持的Qt版本

5
我正在使用CMake构建一个Qt项目,它使用一些较新的Qt功能,要正常构建需要至少5.3版本。我希望友善地提醒那些在CMake配置时失败的人,告诉他们他们的CMake版本不够新,而不是出现一些晦涩难懂的构建错误。
我知道只需使用模块find_package语法(即 find_package(Qt5Widgets REQUIRED))就可以得到至少5.0版本,但如何确保我使用的是正确的次版本呢?最简单的方法是什么?
4个回答

10

我知道这是一个比较旧的帖子,但是你可以使用Qt5Widgets_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()”中的“REQUIRED”标志不会使“if(Qt5Widgets_FOUND)”无用吗? - Alexis Wilke

5
近年来,我们可以通过以下方式向find_package传递版本号:

find_package(Qt5Core 5.10 REQUIRED)
< p >如果找不到兼容的Qt5Core版本, find_package 调用将失败:

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

这个内容可以在https://cmake.org/cmake/help/latest/command/find_package.html#version-selection中进行详细的文档说明。

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()

-2
一个简单的方法:
find_package(Qt6 REQUIRED COMPONENTS Widgets)
message("${Qt6_VERSION}")

根据目前的写法,你的回答不够清晰。请编辑以添加更多细节,以帮助其他人理解这如何回答所提出的问题。你可以在帮助中心找到关于如何撰写好回答的更多信息。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接