You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将uWebSockets集成到CMake项目中?

CMake集成uWebSockets的问题解决方案

一、能否用CMake FetchContent获取库?

可以,FetchContent支持拉取带Git子模块的仓库,只需在配置时指定子模块名称:

include(FetchContent)
FetchContent_Declare(
    uWebSockets
    GIT_REPOSITORY https://github.com/uNetworking/uWebSockets.git
    GIT_TAG v20.44.0 # 替换为你需要的版本
    GIT_SUBMODULES "uSockets"
)
FetchContent_MakeAvailable(uWebSockets)

拉取完成后,需要额外处理构建逻辑,因为uWebSockets本身依赖Make构建。

二、直接调用make vs 重写CMake配置:选哪个?

优先选在CMake中直接调用make,原因如下:

  • 维护成本低:无需手动适配uWebSockets和uSockets的所有构建规则,避免和上游代码更新冲突
  • 贴合官方支持:官方仅维护Make构建,直接调用能保证构建逻辑与官方一致
  • 实现简单:通过ExternalProject_Add或add_custom_target触发make构建,无需深入改写构建规则

示例实现(基于ExternalProject):

include(ExternalProject)
# 调用make构建uWebSockets,可关闭不需要的功能
ExternalProject_Add(
    uWebSockets_build
    SOURCE_DIR ${uWebSockets_SOURCE_DIR}
    CONFIGURE_COMMAND ""
    BUILD_COMMAND make -C ${uWebSockets_SOURCE_DIR} NO_EXAMPLES=1 NO_BOOST=1
    INSTALL_COMMAND ""
    BUILD_IN_SOURCE ON
)

# 导入构建好的uWebSockets库
add_library(uWebSockets STATIC IMPORTED)
set_target_properties(uWebSockets PROPERTIES
    IMPORTED_LOCATION ${uWebSockets_SOURCE_DIR}/libuWS.a
    INTERFACE_INCLUDE_DIRECTORIES ${uWebSockets_SOURCE_DIR}/src
)
add_dependencies(uWebSockets uWebSockets_build)

# 导入依赖的uSockets库
add_library(uSockets STATIC IMPORTED)
set_target_properties(uSockets PROPERTIES
    IMPORTED_LOCATION ${uWebSockets_SOURCE_DIR}/uSockets/libusockets.a
    INTERFACE_INCLUDE_DIRECTORIES ${uWebSockets_SOURCE_DIR}/uSockets/src
)
add_dependencies(uSockets uWebSockets_build)

# 链接到你的项目目标
target_link_libraries(你的项目目标 PRIVATE uWebSockets uSockets)

三、Conan报错的解决办法

你遇到的ImportError: cannot import name 'MSBuild' from 'conans'问题原因:

  • 该usockets包的配方基于Conan 1.x编写,与Conan 2.x的API不兼容
  • Linux环境下完全不需要MSBuild,配方错误引入了Windows平台的构建工具

解决途径:

  • 优先放弃Conan安装,改用前面的FetchContent+make方案,更适配官方构建逻辑
  • 若坚持用Conan,可切换到Conan 1.x环境,或寻找适配Conan 2.x的uWebSockets/usockets包

四、关于CMake集成讨论帖的建议

无需纠结方案是否“最优”,只要能满足你的核心需求(在CMake项目中正常链接使用uWebSockets)即可。优先选择基于官方支持的构建方式衍生的集成方案,能减少后续维护的麻烦。

内容的提问来源于stack exchange,提问作者jack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 19:58:17