本文适用于在 Linux 双系统中使用本机 VS Code 开发 ROS 2/C++ 项目。
版本提醒:下面示例使用
23.1.0。如果你下载的是其他版本,请把命令和配置中的23.1.0、23等版本号改成你实际下载的版本。
1. 下载 clangd
打开 clangd 官方发布页面:
https://github.com/llvm/llvm-project/releases
下载 Linux 版本,例如:
clangd-linux-23.1.0.zip
普通本地开发只需要下载 clangd-linux-版本号.zip。clangd_indexing_tools 是集中式索引工具,一般不需要。
2. 解压安装
在工作区根目录打开终端:
unzip -q clangd-linux-23.1.0.zip -d /tmp
sudo install -Dm755 /tmp/clangd_23.1.0/bin/clangd /usr/local/bin/clangd
sudo cp -a /tmp/clangd_23.1.0/lib/clang /usr/local/lib/
如果下载的不是
23.1.0,请把压缩包名称和/tmp/clangd_23.1.0中的版本号改成实际版本号。
检查版本:
/usr/local/bin/clangd --version
这里把 clangd 主程序直接安装为 /usr/local/bin/clangd。同时复制 lib/clang 是因为 clangd 需要其中的内置头文件和资源文件。
使用 /usr/local/bin 不会覆盖 /usr/bin 中由系统包管理器维护的文件。
终端命令中可以使用 ~ 表示用户主目录,但 VS Code 的 JSON 配置不一定展开 ~,因此配置中使用绝对路径 /usr/local/bin/clangd。
3. 安装 VS Code 扩展
在 VS Code 扩展市场安装:
clangd
选择发布者为 LLVM 的扩展:
llvm-vs-code-extensions.vscode-clangd
建议关闭 Microsoft C/C++ 扩展的 IntelliSense,避免和 clangd 冲突。
4. 配置 VS Code
打开 VS Code 的用户设置:
Ctrl+Shift+P → Preferences: Open User Settings (JSON)
也可以直接编辑配置文件:
~/.config/Code/User/settings.json
加入下面配置:
{
"clangd.path": "/usr/local/bin/clangd",
"clangd.arguments": [
"--background-index",
"--compile-commands-dir=${workspaceFolder}",
"--completion-style=detailed",
"--header-insertion=iwyu",
"--query-driver=/usr/bin/g++*",
"--clang-tidy",
"-j=12"
],
"clangd.trace": "verbose",
"clangd.fileStatus": true,
"C_Cpp.autocomplete": "disabled",
"C_Cpp.intelliSenseEngine": "disabled"
}
再次提醒:如果安装的是其他版本,请把解压目录中的
23.1.0改成实际版本号。clangd.path固定使用/usr/local/bin/clangd,不需要写版本号。
不要把 --compile-commands-dir 写进 clangd.fallbackFlags,也不要加入 Windows 参数,例如:
-DWIN32
-DUNICODE
-I${env:INCLUDE}
5. 重启并检查
在 VS Code 执行:
Ctrl+Shift+P → Developer: Reload Window
Ctrl+Shift+P → clangd: Restart language server
完成后,clangd 就可以提供:
- C++ 代码补全
- 函数和变量跳转
- 头文件检查
- 编译错误诊断
- clang-tidy 静态检查
- 后台索引
6. 如果仍然找不到 iostream 等标准库
如果 clangd 仍然提示找不到:
#include <iostream>
或者其他 C++ 标准库头文件,可以尝试重新安装 GCC 对应的标准库开发文件:
sudo apt install libstdc++-12-dev
然后检查系统中是否存在对应头文件:
ls /usr/include/c++/
正常情况下可以看到类似:
12
如果你的 GCC 版本不是 12,例如:
g++ --version
显示的是 GCC 13,那么更建议安装对应版本:
sudo apt install libstdc++-13-dev
7. 检查 CMakeLists.txt
对于 ROS 2 / C++ 项目,建议在 CMakeLists.txt 中明确指定 C++ 标准:
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
对于 ROS 2 项目,一般使用 C++17 就足够了。
修改完成后,重新编译项目。
例如 ROS 2 工作区:
colcon build --symlink-install
然后重新生成 compile_commands.json。
如果项目使用 CMake,可以加入:
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
或者构建时:
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ..
clangd 会根据 compile_commands.json 获取:
- 头文件搜索路径
- 编译参数
- 宏定义
- C++ 标准
- ROS 2 依赖路径
因此对于 ROS 2 项目来说,compile_commands.json 非常重要。
8. 最后重启 VS Code
修改完成后执行:
Ctrl+Shift+P → Developer: Reload Window
然后:
Ctrl+Shift+P → clangd: Restart language server
如果配置正确,此时类似:
#include <iostream>
#include <memory>
#include <vector>
#include <rclcpp/rclcpp.hpp>
这些头文件应该都能够正常识别,代码补全、跳转和错误提示也会恢复正常。