使用 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的主要内容,如果未能解决你的问题,请参考以下文章

cmake Windows 10 SDK

Windows XP上的VS Code + WSL应用程序上的CMake扩展

使用 CMake、Clang 和 Ninja 在 Windows 上构建 c++ 项目

在 Windows 上使用 CMake 构建 open62541 失败

如何使用 CMAKE 从命令行在 Windows 上构建 x86 和/或 x64?

mysql源码在windows 10上通过vs2019构建方法