如何在编译特定版本的Qt期间告诉CMake使用?

时间:2015-04-23 20:38:26

标签: c++ qt cmake

我的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尝试了几个选项,但它们都没有效果。

1 个答案:

答案 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变量。