我的Ubuntu上安装了两个版本的Qt - 5.2(默认)和5.4(在/opt/Qt/5.4/gcc_64中):
的CMakeLists.txt:
project(testproject)
find_package(Qt5Core HINTS /opt/Qt/5.4/gcc_64 REQUIRED)
add_executable(main main.cpp)
target_link_libraries(main Qt5::Core)
main.cpp中:
#include <QDebug>
int main()
{
qDebug() << "runtime version: " << qVersion() << " compiled with: " << QT_VERSION_STR << endl;
return 0;
}
运行程序:
cmake . && make clean && make && LD_LIBRARY_PATH=/opt/Qt/5.4/gcc_64/lib ./main
输出:
runtime version: 5.4.0 compiled with: 5.2.1
如何告诉CMake内部使用Qt 5.4而不是默认Qt 5.2?我在HINTS
中为find_package
尝试了几个选项,但它们都没有效果。
答案 0 :(得分:4)
我查看了Qt5安装生成的CMake文件,并且这些文件中的任何位置都没有从调用者那里获取提示。一旦拾取其中一个CMake文件,它们都使用相对路径。
也就是说,如果您正在寻找核心库,那么核心库版本的所有依赖关系都将是正确的版本。所以我们的目标是在你调用find_package
时让它选择正确的CMake模块,并且有几种方法可以使用CMake级别提示。
CMAKE_PREFIX_PATH
您可以设置Qt安装到的基本目录的前缀路径。基目录是包含lib/
和bin/
的目录。在您的情况下,这可能是这样的:
export CMAKE_PREFIX_PATH=/opt/Qt/5.4/gcc_64:$CMAKE_PREFIX_PATH
然后从同一个shell会话运行你的cmake命令。
Qt5Core_DIR
CMakeLists.txt
这需要设置一个变量,指向您希望从中找到Qt的正确的CMake根模块:
set(Qt5Core_DIR /opt/Qt/5.4/gcc_64/lib/cmake/Qt5Core)
find_package(Qt5Core REQUIRED)
当然,问题在于,如果您想要查找其他模块,则必须在Qt5<MODULE>_DIR
来电之前设置特定的find_package
变量。