vscode clangd 保姆教程

vscode clangd 保姆教程

以ubuntu 22.04系统为例。

基础依赖

bash 复制代码
# ubuntu soft
sudo apt install clangd 

# 手动安装 vscode

# vscode plugin
名称: clangd
ID: llvm-vs-code-extensions.vscode-clangd
VS Marketplace 链接: https://marketplace.visualstudio.com/items?itemName=llvm-vs-code-extensions.vscode-clangd

项目配置

bash 复制代码
# 项目目录必须结构

├── .clangd
├── .clang-format
├── CMakeLists.txt
├── .vscode
│   └── settings.json
└── main.cpp

文件 CMakeLists.txt:

cmake 复制代码
cmake_minimum_required(VERSION 3.10)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON) # 输出 clangd需要的 compile_commands.json

文件 .vscode/settings.json:(ros相关路径不需要的可以删除)

json 复制代码
{
    "C_Cpp.intelliSenseEngine": "disabled",
    "C_Cpp.default.compilerArgs": [
        "--std=c++17"
    ],
    // sudo apt install clangd
    "clangd.fallbackFlags": [
        "-std=c++17",  // 指定C++标准
        "-I${workspaceFolder}/src",  // 项目源文件目录
        "-I${workspaceFolder}/include",
        //"-I/usr/include",
        //"-I/usr/include/linux",
        //"-I/usr/include/c++/11",
        //"-I/usr/include/x86_64-linux-gnu",
        //"-I/usr/include/x86_64-linux-gnu/11",
        "-I/opt/ros/humble/include/actionlib_msgs",
        "-I/opt/ros/humble/include/action_msgs",
        "-I/opt/ros/humble/include/action_tutorials_interfaces",
        "-I/opt/ros/humble/include/ament_index_cpp",
        "-I/opt/ros/humble/include/angles",
        "-I/opt/ros/humble/include/builtin_interfaces",
        "-I/opt/ros/humble/include/class_loader",
        "-I/opt/ros/humble/include/composition_interfaces",
        "-I/opt/ros/humble/include/cv_bridge",
        "-I/opt/ros/humble/include/depthimage_to_laserscan",
        "-I/opt/ros/humble/include/diagnostic_msgs",
        "-I/opt/ros/humble/include/example_interfaces",
        "-I/opt/ros/humble/include/fastcdr",
        "-I/opt/ros/humble/include/fastrtps",
        "-I/opt/ros/humble/include/foonathan_memory",
        "-I/opt/ros/humble/include/geometry_msgs",
        "-I/opt/ros/humble/include/image_geometry",
        "-I/opt/ros/humble/include/image_tools",
        "-I/opt/ros/humble/include/image_transport",
        "-I/opt/ros/humble/include/interactive_markers",
        "-I/opt/ros/humble/include/intra_process_demo",
        "-I/opt/ros/humble/include/joy",
        "-I/opt/ros/humble/include/kdl_parser",
        "-I/opt/ros/humble/include/keyboard_handler",
        "-I/opt/ros/humble/include/laser_geometry",
        "-I/opt/ros/humble/include/libstatistics_collector",
        "-I/opt/ros/humble/include/libyaml_vendor",
        "-I/opt/ros/humble/include/lifecycle_msgs",
        "-I/opt/ros/humble/include/logging_demo",
        "-I/opt/ros/humble/include/map_msgs",
        "-I/opt/ros/humble/include/message_filters",
        "-I/opt/ros/humble/include/moodycamel",
        "-I/opt/ros/humble/include/nav_msgs",
        "-I/opt/ros/humble/include/pcl_conversions",
        "-I/opt/ros/humble/include/pcl_msgs",
        "-I/opt/ros/humble/include/pendulum_msgs",
        "-I/opt/ros/humble/include/pluginlib",
        "-I/opt/ros/humble/include/qt_gui_cpp",
        "-I/opt/ros/humble/include/rcl",
        "-I/opt/ros/humble/include/rcl_action",
        "-I/opt/ros/humble/include/rclcpp",
        "-I/opt/ros/humble/include/rclcpp_action",
        "-I/opt/ros/humble/include/rclcpp_components",
        "-I/opt/ros/humble/include/rclcpp_lifecycle",
        "-I/opt/ros/humble/include/rcl_interfaces",
        "-I/opt/ros/humble/include/rcl_lifecycle",
        "-I/opt/ros/humble/include/rcl_logging_interface",
        "-I/opt/ros/humble/include/rcl_yaml_param_parser",
        "-I/opt/ros/humble/include/rcpputils",
        "-I/opt/ros/humble/include/rcutils",
        "-I/opt/ros/humble/include/resource_retriever",
        "-I/opt/ros/humble/include/rmw",
        "-I/opt/ros/humble/include/rmw_dds_common",
        "-I/opt/ros/humble/include/rmw_fastrtps_cpp",
        "-I/opt/ros/humble/include/rmw_fastrtps_shared_cpp",
        "-I/opt/ros/humble/include/robot_state_publisher",
        "-I/opt/ros/humble/include/rosbag2_compression",
        "-I/opt/ros/humble/include/rosbag2_compression_zstd",
        "-I/opt/ros/humble/include/rosbag2_cpp",
        "-I/opt/ros/humble/include/rosbag2_interfaces",
        "-I/opt/ros/humble/include/rosbag2_storage",
        "-I/opt/ros/humble/include/rosbag2_storage_default_plugins",
        "-I/opt/ros/humble/include/rosbag2_transport",
        "-I/opt/ros/humble/include/rosgraph_msgs",
        "-I/opt/ros/humble/include/rosidl_runtime_c",
        "-I/opt/ros/humble/include/rosidl_runtime_cpp",
        "-I/opt/ros/humble/include/rosidl_typesupport_c",
        "-I/opt/ros/humble/include/rosidl_typesupport_cpp",
        "-I/opt/ros/humble/include/rosidl_typesupport_fastrtps_c",
        "-I/opt/ros/humble/include/rosidl_typesupport_fastrtps_cpp",
        "-I/opt/ros/humble/include/rosidl_typesupport_interface",
        "-I/opt/ros/humble/include/rosidl_typesupport_introspection_c",
        "-I/opt/ros/humble/include/rosidl_typesupport_introspection_cpp",
        "-I/opt/ros/humble/include/rqt_gui_cpp",
        "-I/opt/ros/humble/include/rqt_image_view",
        "-I/opt/ros/humble/include/rttest",
        "-I/opt/ros/humble/include/rviz_common",
        "-I/opt/ros/humble/include/rviz_default_plugins",
        "-I/opt/ros/humble/include/rviz_rendering",
        "-I/opt/ros/humble/include/sensor_msgs",
        "-I/opt/ros/humble/include/shape_msgs",
        "-I/opt/ros/humble/include/statistics_msgs",
        "-I/opt/ros/humble/include/std_msgs",
        "-I/opt/ros/humble/include/std_srvs",
        "-I/opt/ros/humble/include/stereo_msgs",
        "-I/opt/ros/humble/include/teleop_twist_joy",
        "-I/opt/ros/humble/include/tf2",
        "-I/opt/ros/humble/include/tf2_bullet",
        "-I/opt/ros/humble/include/tf2_eigen",
        "-I/opt/ros/humble/include/tf2_eigen_kdl",
        "-I/opt/ros/humble/include/tf2_geometry_msgs",
        "-I/opt/ros/humble/include/tf2_kdl",
        "-I/opt/ros/humble/include/tf2_msgs",
        "-I/opt/ros/humble/include/tf2_ros",
        "-I/opt/ros/humble/include/tf2_sensor_msgs",
        "-I/opt/ros/humble/include/tlsf",
        "-I/opt/ros/humble/include/tlsf_cpp",
        "-I/opt/ros/humble/include/tracetools",
        "-I/opt/ros/humble/include/trajectory_msgs",
        "-I/opt/ros/humble/include/turtlesim",
        "-I/opt/ros/humble/include/unique_identifier_msgs",
        "-I/opt/ros/humble/include/urdf",
        "-I/opt/ros/humble/include/urdfdom",
        "-I/opt/ros/humble/include/urdfdom_headers",
        "-I/opt/ros/humble/include/urdf_parser_plugin",
        "-I/opt/ros/humble/include/visualization_msgs"
    ],
    "clangd.arguments": [
        //"--all-scopes-completion",
        "--compile-commands-dir=${workspaceFolder}/build",  // 查找 compile_commands.json
        "--background-index",
        "--clang-tidy",
        "--completion-style=detailed",
        "--fallback-style=Microsoft",
        "--function-arg-placeholders=true",
        "--header-insertion=never",
        "--header-insertion-decorators",
        "--enable-config",
        "-j=12",
        "--query-driver=/usr/bin/c++,/usr/bin/g++",  // 这个是重点,使用c++/g++进行库文件索引
        "--pch-storage=memory",
        "--pretty"
    ],
    "cmake.ignoreCMakeListsMissing": true
}

文件 .clangd:

yaml 复制代码
CompileFlags:
    Remove: [-march=*, -mabi=*]

Diagnostics:
  # 禁用未使用头文件的警告,这在ROS2项目中很常见
  UnusedIncludes: None
  ClangTidy:
    Add: 
      - "performance-*"
      - "modernize-*"
      - "cppcoreguidelines-*"
    Remove: 
      - "cert-err58-cpp"  # 避免关于静态变量初始化的警告

# 启用更详细的代码补全
Completion:
  AllScopes: true


# 后台索引以提高性能
Index:
  Background: Build

文件 .clang-format:

yaml 复制代码
---
Language: Cpp
BasedOnStyle: Microsoft #Google

# 基本设置
ColumnLimit: 180  # 行最大长度
Standard: Auto
TabWidth: 4
UseTab: Never
相关推荐
Diligently_5 天前
idea 中vm option 配置
java·ide·intellij-idea
我命由我123455 天前
在 Android Studio 中,新建 AIDL 文件按钮是灰色
android·ide·android studio·安卓·android jetpack·android-studio·android runtime
Hello World . .5 天前
Linux:线程间通信
linux·开发语言·vscode
AC赳赳老秦5 天前
云原生AI故障排查新趋势:利用DeepSeek实现高效定位部署报错与性能瓶颈
ide·人工智能·python·云原生·prometheus·ai-native·deepseek
被制作时长两年半的个人练习生5 天前
claude code for vscode 配置 qwen3.5
ide·vscode·claude code·qwen3.5
圣心5 天前
Visual Studio Code 中的 AI 智能操作
ide·人工智能·vscode
吹牛不交税5 天前
关于vscode左侧资源管理器目录层级疑似异常的问题
ide·vscode·编辑器
xixi09245 天前
selenium IDE安装使用教程
ide·selenium·测试工具
嵌入小生0075 天前
线程间通信---嵌入式(Linux)
linux·c语言·vscode·嵌入式·互斥锁·线程间通信·信号量
西门吹-禅5 天前
【eclipse 升级】
java·ide·eclipse