CMake:安装两个 Qt 版本时查找 Qt 包

Ale*_*x44 6 qt cmake

在我的计算机 (Ubuntu-Gnome) 上安装了两个 Qt 版本。一种使用包管理器 (5.x),另一种手动使用/opt/Qt (5.9)。

对于一个项目,我需要在CMake 中使用/opt/Qt安装。但是find_package(Qt5Core 5.9 COMPONENTS CORE REQUIRED)没有找到正确的安装:

  Could not find a configuration file for package "Qt5Core" that is
  compatible with requested version "5.9".

  The following configuration files were considered but not accepted:

    /usr/lib/x86_64-linux-gnu/cmake/Qt5Core/Qt5CoreConfig.cmake, version: 5.7.1
Run Code Online (Sandbox Code Playgroud)

我尝试使用所有路径变体设置CMAKE_PREFIX_PATHCMAKE_MODULE_PATH添加到 CMake 的搜索路径,但它根本不起作用。

如何在/opt/Qt/正确设置第二个安装的搜索路径?


更新以@Florian 输入

这有效:

find_package(
   Qt5Core 5.9
   COMPONENTS
      Core
   REQUIRED
)
Run Code Online (Sandbox Code Playgroud)

和...一起

cmake -DQt5_DIR:PATH=/opt/Qt/5.9.2/gcc_64/lib/cmake/Qt5Core
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,我只找到了 QT5Core。有了它,它似乎也适用于所有组件:

find_package(
   Qt5 5.9
   COMPONENTS
      Core
   REQUIRED
)
Run Code Online (Sandbox Code Playgroud)

和...一起

cmake -DQt5_DIR:PATH=/opt/Qt/5.9.2/gcc_64/lib/cmake/Qt5
Run Code Online (Sandbox Code Playgroud)

第二次编辑

为了避免总是在调用中放置完整路径,我将其添加到我的CMakeLists.txt 中

set(QT_INSTALL_PATH /opt/Qt)
file( GLOB_RECURSE sres ${QT_INSTALL_PATH}/*/Qt5Config.cmake )
get_filename_component( Qt5_DIR ${sres} DIRECTORY )
Run Code Online (Sandbox Code Playgroud)

之后这工作正常:

find_package(
   Qt5 5.9
   COMPONENTS
      Core
      Network
   REQUIRED
)
Run Code Online (Sandbox Code Playgroud)

Cin*_*its 6

cmake -DQt5_DIR:PATH=/opt/Qt5/5.9.2/gcc_64/lib/cmake/Qt5

文档