使用 CMake 在 Windows 10 上构建 uWebSockets
Posted
技术标签:
【中文标题】使用 CMake 在 Windows 10 上构建 uWebSockets【英文标题】:Build uWebSockets on Windows 10 with CMake 【发布时间】:2019-12-18 22:24:48 【问题描述】:我想在我的 C++ 项目中使用uWebSockets(UWS) 通过网络传输图像。该设置将在多个操作系统上运行,因此创建构建文件的最佳方式似乎是使用 CMake。
但是,我是 CMake 新手,很难构建 UWS。我不明白如何开始在 Windows 10 上使用官方存储库,所以我发现 another repository 包含一个 CMakeFiles.txt
文件和一些依赖项(openssl、zlib、libuv,但是由于某种原因,它不包括 uSockets)。根CMakeFiles.txt
包括:
[...]
find_package(OpenSSL REQUIRED)
find_package(ZLIB REQUIRED)
find_path(LIBUV_INCLUDE_DIR uv.h)
find_library(LIBUV_LIBRARY NAMES uv uv1)
[...]
它看起来很简单,但是当我尝试运行mkdir build && cd build; cmake ..
时,它找不到OpenSSL
。这是它吐出的错误消息:
[...]
[cmake] Could not find a package configuration file provided by "OpenSSL" with any
[cmake] of the following names:
[cmake]
[cmake] OpenSSLConfig.cmake
[cmake] openssl-config.cmake
[...]
上面的错误信息表明我需要为每个库设置一个配置文件。但是,如果我正确理解了find_package
docs,则该命令本身会在根文件夹下的各个位置搜索库。 find_package
需要什么样的文件夹结构才能工作?
更一般地说,我是否在这个替代回购上浪费时间?有没有更好的方法在 Windows 10 中使用 UWS?官方 repo 有 a question 关于如何在 Windows 上使用它,但我不明白这是如何回答这个问题的。它只指向this page,它表示任何特定的构建系统都不会得到正式支持。
任何帮助将不胜感激。
【问题讨论】:
你看到这个 wiki 页面了吗:github.com/uNetworking/uWebSockets/wiki/Misc.-details ?看起来某处可能有一个 Visual Studio 项目 (VC++.vcxproj)。 【参考方案1】:使用add_subdirectory
导入依赖项似乎是解决此问题的好方法。当我运行 cmake 时,我收到了 LNK2019 错误。我意识到我在网上找到的以下代码sn -p导致了问题,并且当我删除它时系统工作。
if(MSVC)
set(CMAKE_EXE_LINKER_FLAGS_DEBUG "$CMAKE_EXE_LINKER_FLAGS_DEBUG /NODEFAULTLIB:libcmt.lib /NODEFAULTLIB:msvcrt.lib")
set(CMAKE_EXE_LINKER_FLAGS "$CMAKE_EXE_LINKER_FLAGS /SUBSYSTEM:WINDOWS")
endif()
【讨论】:
以上是关于使用 CMake 在 Windows 10 上构建 uWebSockets的主要内容,如果未能解决你的问题,请参考以下文章
Windows XP上的VS Code + WSL应用程序上的CMake扩展
使用 CMake、Clang 和 Ninja 在 Windows 上构建 c++ 项目
在 Windows 上使用 CMake 构建 open62541 失败