CMake find_package 找不到 WebSockets

Posted

技术标签:

【中文标题】CMake find_package 找不到 WebSockets【英文标题】:CMake find_package can't find WebSockets 【发布时间】:2019-02-21 18:53:43 【问题描述】:

根据https://blog.kitware.com/cmake-finding-qt5-the-right-way/,find_package(Qt5 COMPONENTS Core Qml Quick Svg Qt5WebSockets REQUIRED) 方法允许我加载大量 QT5 包,同时通过设置 Qt5_DIR 变量只能设置一次 QT 根。我正在尝试使用此技术编译下面列出的最小 CMake 项目。 您可以看到没有找到 WebSockets。有什么问题?

PS:我在 /home/lz/Qt5.11.2 的主目录确实有一个新的 Qt 安装,它刚刚为我安装了 Qt 安装程序,它确实有 libwebsockets 和 websocket 包含文件。

我的 CMakeLists.txt:

find_package(Qt5 COMPONENTS Core Qml Quick Svg Qt5WebSockets REQUIRED)

我如何运行它:

cmake -DQt5_DIR=/home/lz/Qt5.11.2 .
-- The C compiler identification is GNU 7.2.0
-- The CXX compiler identification is GNU 7.2.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
CMake Error at /usr/lib/x86_64-linux-gnu/cmake/Qt5/Qt5Config.cmake:28 (find_package):
  Could not find a package configuration file provided by "Qt5Qt5WebSockets"
  with any of the following names:

    Qt5Qt5WebSocketsConfig.cmake
    qt5qt5websockets-config.cmake

  Add the installation prefix of "Qt5Qt5WebSockets" to CMAKE_PREFIX_PATH or
  set "Qt5Qt5WebSockets_DIR" to a directory containing one of the above
  files.  If "Qt5Qt5WebSockets" provides a separate development package or
  SDK, be sure it has been installed.
Call Stack (most recent call first):
  CMakeLists.txt:1 (find_package)


CMake Warning (dev) in CMakeLists.txt:
  No cmake_minimum_required command is present.  A line of code such as

    cmake_minimum_required(VERSION 3.9)

  should be added at the top of the file.  The version specified may be lower
  if you wish to support older CMake versions for this project.  For more
  information run "cmake --help-policy CMP0000".
This warning is for project developers.  Use -Wno-dev to suppress it.

-- Configuring incomplete, errors occurred!
See also "/home/lz/c/CMakeFiles/CMakeOutput.log".

PS:没有 WebSockets 的 cmake '编译'就好了,所以 WebSockets 是唯一没有找到的模块

更新:

在下面的帮助之后,我仍然遇到与 WebSocket 相关的错误:

/home/lz/orwell/react-native-desktop-orwell/ReactQt/runtime/src/websocketmodule.cpp:12:10: fatal error: QWebSocket: No such file or directory
 #include <QWebSocket>

现在我成功地使用了我的 QT,正如您在详细输出中看到的那样:

[ 50%] Building CXX object CMakeFiles/m.dir/main.o
/usr/bin/c++  -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NO_DEBUG -DQT_WIDGETS_LIB -isystem /home/lz/Qt5.11.2/5.11.2/gcc_64/include -isystem /home/lz/Qt5.11.2/5.11.2/gcc_64/include/QtWidgets -isystem /home/lz/Qt5.11.2/5.11.2/gcc_64/include/QtGui -isystem /home/lz/Qt5.11.2/5.11.2/gcc_64/include/QtCore -isystem /home/lz/Qt5.11.2/5.11.2/gcc_64/./mkspecs/linux-g++  -fPIC -std=gnu++11 -o CMakeFiles/m.dir/main.o -c /home/lz/c/main.cpp
/home/lz/c/main.cpp:1:10: fatal error: QWebSocket: No such file or directory
 #include <QWebSocket>
          ^~~~~~~~~~~~
compilation terminated.

【问题讨论】:

【参考方案1】:

将 CMakeLists.txt 中的行更改为

find_package(Qt5 COMPONENTS Core Qml Quick Svg WebSockets REQUIRED)

您不需要使用此语法在组件名称中添加“Qt5”前缀。

【讨论】:

这很奇怪。当我解决这个问题时,现在的问题是我指定的 Qt5_DIR 没有被使用。你有什么想法吗? 我相信你的 Qt5_DIR 甚至在你解决这个问题之前就没有被使用过。查看用于显示错误的行:CMake Error at /usr/lib/x86_64-linux-gnu/cmake/Qt5/Qt5Config.cmake。这显然不是来自您的家庭目录的 Qt 安装。您可以使用-DCMAKE_PREFIX_PATH=/home/lz/Qt5.11.2/gcc_64 将 CMake 指向您的特定 Qt 安装。注意路径中的最后一个目录,gcc_64:很可能你有它,但否则你应该指出 CMake 到 Qt 安装中包含 includelibbin 子目录的目录。 最有可能需要的目录实际上是/home/lz/Qt5.11.2/5.11/gcc_64 它也不适用于这个 QT 目录。它使用系统一。但是,在我解决您显示的问题之前,它实际上是使用 qt5 目录,正如我在详细输出中看到的那样 您需要清除缓存路径才能找到 Qt5 安装,然后我的建议才有机会发挥作用。在您的构建目录中有CMakeCache.txt 文件,它应该包含像“Qt5Core_DIR=/usr/lib/<...>”这样的行。将它们全部清除,然后重试cmake -DCMAKE_PREFIX_PATH=&lt;your Qt5 dir&gt;。或者,只需 rm -rf 构建目录中的所有内容并重试。

以上是关于CMake find_package 找不到 WebSockets的主要内容,如果未能解决你的问题,请参考以下文章

CMake 在 macOS 上找不到 libevent

cmake find_package脚本只能在Linux上失败

OS X cmake 找不到 PythonLibs 3.4

visualstudio2019 集成vcpkg,find_package找不到模块问题

程序找不到PCL的CMake files,catkin_make时报错

问题记录:VSCODE+CMAKE使用时Intellisense找不到include的文件