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
相关推荐
热爱生活的五柒44 分钟前
vscode左边打开文件后会覆盖上一个打开的文件,有什么不覆盖的方法
ide·vscode·编辑器
精英的英1 小时前
【工具开发】适用于交叉编译环境的QT qmake项目转换vscode项目插件
人工智能·vscode·qt·开源软件
假装我不帅10 小时前
wsl+vscode开发.net项目
ide·vscode·.net
小蕾Java11 小时前
【VSCode】Visual Studio Code 2025安装包及安装教程 (附所有版本下载)
ide·vscode·编辑器
达子66612 小时前
用Vscode编译正点原子ESP32例程报错:ninja: error: loading ‘build.ninja‘: 系统找不到指定的文件
ide·vscode·编辑器
热爱生活的五柒13 小时前
vscode如何链接远程服务器里面的docker里面的目录
服务器·vscode·docker
OK_boom15 小时前
visual studio 打开设计时刻抛出异常“未能加载文件或程序集...”的另一解决方法
ide·visual studio
小蕾Java15 小时前
【VSCode】Visual Studio Code 2024安装包及安装教程 (附所有版本下载)
ide·vscode·编辑器
亚林瓜子16 小时前
在vscode中全选后,同时在每行行尾,开始多行编辑(Mac版)
ide·vscode·macos
Dobby_0521 小时前
【Go】C++ 转 Go 第(一)天:环境搭建 Windows + VSCode 远程连接 Linux
linux·运维·c++·vscode·golang