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 安装中包含 include
、lib
和 bin
子目录的目录。
最有可能需要的目录实际上是/home/lz/Qt5.11.2/5.11/gcc_64
。
它也不适用于这个 QT 目录。它使用系统一。但是,在我解决您显示的问题之前,它实际上是使用 qt5 目录,正如我在详细输出中看到的那样
您需要清除缓存路径才能找到 Qt5 安装,然后我的建议才有机会发挥作用。在您的构建目录中有CMakeCache.txt
文件,它应该包含像“Qt5Core_DIR=/usr/lib/<...>”这样的行。将它们全部清除,然后重试cmake -DCMAKE_PREFIX_PATH=<your Qt5 dir>
。或者,只需 rm -rf
构建目录中的所有内容并重试。以上是关于CMake find_package 找不到 WebSockets的主要内容,如果未能解决你的问题,请参考以下文章
cmake find_package脚本只能在Linux上失败
visualstudio2019 集成vcpkg,find_package找不到模块问题