Qt安装了多个版本时,CMake中写的find_package()到底找到的是哪个库?
例如,我电脑安装了两个版本的Qt,一个是5.12.3另一个是5.14.2

此时我的CMake如何指定使用哪个版本呢?方法如下:
1、指定Qt5的所有模块仅使用5.12.3的版本(5.12.3 EXACT表示强制匹配5.12.3版本,匹配不到则直接报错退出):
set(CMAKE_PREFIX_PATH "C:/Qt/Qt5.12.3/5.12.3/msvc2017_64")
find_package(Qt5 5.12.3 EXACT COMPONENTS Widgets Network Quick REQUIRED)
2、多版本混用,指定Qt5一些模块使用5.12.3,一些使用5.14.2(此方法可能有误,自己再试试吧):
# 添加qt5.12.3的安装路径,用于给find_package指定路径
set(CMAKE_PREFIX_PATH "C:/Qt/Qt5.12.3/5.12.3/msvc2017_64")
# 追加qt5.14.2的安装路径,用于给find_package指定路径
list(APPEND CMAKE_PREFIX_PATH "C:/Qt/Qt5.14.2/5.14.2/msvc2017_64")
# Qt5::Widgets 和 Qt5::Network 模块使用5.12.3版本
find_package(Qt5 5.12.3 EXACT COMPONENTS Widgets Network REQUIRED)
# Qt5::Quick模块使用5.14.2版本
find_package(Qt5 5.14.2 EXACT COMPONENTS Quick REQUIRED)
3、如果很多库你都安装了多个版本,一定要先把库的安装路径追加到 “CMAKE_PREFIX_PATH” 变量中,再find_package(),注意使用 “版本号 EXACT” 关键字修饰,帮你判断是否找到指定版本;
# 追加指定版本库的安装路径,用于给find_package指定路径
list(APPEND CMAKE_PREFIX_PATH "指定版本库的安装路径")
find_package(<库名> <版本号> EXACT COMPONENTS <组件名1> ... <组件名n> REQUIRED)
当系统中安装了多个Qt版本,CMake的find_package函数可能会遇到版本选择的问题。文章提供了三种策略来指定使用特定版本的Qt库:1)设置CMAKE_PREFIX_PATH强制使用5.12.3版本;2)混合使用不同版本的Qt模块;3)先添加库路径到CMAKE_PREFIX_PATH,然后使用EXACT关键字精确查找指定版本的库组件。这种方法适用于需要多个版本库的情况。
3589

被折叠的 条评论
为什么被折叠?



