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)