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

如何通过CMake在C++项目中使用仅头文件库websocketpp并解决编译错误

编译WebSocketPP仅头文件库时头文件找不到的解决方法

问题详情

在/home/user/Desktop/tutorial目录下,已放置从GitHub复制的websocketpp文件夹,项目包含main.cpp和CMakeLists.txt,编译时提示找不到websocketpp/config/core_client.hpp文件。

项目文件内容

main.cpp

#include <iostream>
#include "websocketpp/config/asio_client.hpp"

int main()
{
    std::cout << "Hello\n";
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.0.0)
project(tutorial VERSION 0.1.0 LANGUAGES C CXX)

include(CTest)
enable_testing()

include_directories(websocketpp)

add_executable(tutorial main.cpp)

编译错误输出

[main] Building folder: Tutorial all
[build] Starting build
[proc] Executing command: /usr/bin/cmake --build /home/user/Desktop/tutorial/build --config Debug --target all -j 6 --
[build] [ 50%] Building CXX object CMakeFiles/tutorial.dir/main.cpp.o
[build] In file included from /home/user/Desktop/tutorial/main.cpp:2:
[build] /home/user/Desktop/tutorial/websocketpp/config/asio_client.hpp:31:10: fatal error: websocketpp/config/core_client.hpp: No such file or directory
[build]    31 | #include <websocketpp/config/core_client.hpp>
[build]       |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[build] compilation terminated.
[build] gmake[2]: *** [CMakeFiles/tutorial.dir/build.make:76: CMakeFiles/tutorial.dir/main.cpp.o] Error 1
[build] gmake[1]: *** [CMakeFiles/Makefile2:839: CMakeFiles/tutorial.dir/all] Error 2
[build] gmake: *** [Makefile:121: all] Error 2
[proc] The command: /usr/bin/cmake --build /home/user/Desktop/tutorial/build --config Debug --target all -j 6 -- exited with code: 2
[driver] Build completed: 00:00:00.179
[build] Build finished with exit code 2

解决步骤

错误根源是include_directories(websocketpp)的路径设置错误:WebSocketPP内部头文件引用是基于websocketpp目录作为根节点的(比如<websocketpp/config/core_client.hpp>),但当前设置让编译器在websocketpp目录下查找,导致路径变为websocketpp/websocketpp/config/core_client.hpp,自然找不到文件。

修改CMakeLists.txt的包含路径设置:

方法1:使用当前源目录作为包含路径

替换原有include_directories(websocketpp)为:

include_directories(${CMAKE_CURRENT_SOURCE_DIR})

方法2:使用现代CMake的目标级包含路径(推荐)

删除include_directories(websocketpp),在add_executable后添加:

target_include_directories(tutorial PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})

两种方法都能让编译器正确识别websocketpp作为头文件的根目录,解决编译错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 10:14:58