当前位置: 首页 > news >正文

vscode clangd 保姆教程

vscode clangd 保姆教程

以ubuntu 22.04系统为例。

基础依赖

# 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

项目配置

# 项目目录必须结构├── .clangd
├── .clang-format
├── CMakeLists.txt
├── .vscode
│   └── settings.json
└── main.cpp

文件 CMakeLists.txt:

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相关路径不需要的可以删除)

{"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:

CompileFlags:Remove: [-march=*, -mabi=*]Diagnostics:# 禁用未使用头文件的警告,这在ROS2项目中很常见UnusedIncludes: NoneClangTidy:Add: - "performance-*"- "modernize-*"- "cppcoreguidelines-*"Remove: - "cert-err58-cpp"  # 避免关于静态变量初始化的警告# 启用更详细的代码补全
Completion:AllScopes: true# 后台索引以提高性能
Index:Background: Build

文件 .clang-format:

---
Language: Cpp
BasedOnStyle: Microsoft #Google# 基本设置
ColumnLimit: 180  # 行最大长度
Standard: Auto
TabWidth: 4
UseTab: Never
http://www.dtcms.com/a/394915.html

相关文章:

  • MySQL时间戳转换
  • 【Spark+Hive+hadoop】基于spark+hadoop基于大数据的人口普查收入数据分析与可视化系统
  • 分布式专题——17 ZooKeeper经典应用场景实战(下)
  • TDengine 2.6 taosdump数据导出备份 导入恢复
  • 探索 Yjs 协同应用场景 - 分布式撤销管理
  • 【软考中级 - 软件设计师 - 基础知识】数据结构之栈与队列​
  • LeetCode 385 迷你语法分析器 Swift 题解:从字符串到嵌套数据结构的解析过程
  • windows系统使用sdkman管理java的jdk版本,WSL和Git Bash哪个更能方便管理jdk版本
  • 生产环境K8S的etcd备份脚本
  • Mac电脑多平台Git账号配置
  • Etcd详解:Kubernetes的大脑与记忆库
  • 深刻理解PyTorch中RNN(循环神经网络)的output和hn
  • 大模型如何赋能写作:从创作到 MCP 自动发布的全链路解析
  • C++设计模式之创建型模式:工厂方法模式(Factory Method)
  • 传输层协议——UDP/TCP
  • 三板汇茶咖空间签约“可信资产IPO与数链金融RWA”链改2.0项目联合实验室
  • 【MySQL】MySQL 表文件误删导致启动失败及无法外部连接解决方案
  • LVS简介
  • 如何将联系人从iPhone转移到iPhone的7种方法
  • 『 MySQL数据库 』MySQL复习(一)
  • 3005. 最大频率元素计数
  • ACP(七)优化RAG应用提升问答准确度
  • 鸿蒙:使用bindPopup实现气泡弹窗
  • Langchan4j 框架 AI 无限循环调用文件创建工具解决方案记录
  • Python GIS 开发里最核心的4个基础组件(理论+实操篇)
  • 关于跨域和解决方案
  • 学习日报 20250921|LoadingCache
  • 聚力赋能|竹云受邀出席2025华为全联接大会
  • 抓取 Dump 文件与 WinDbg 使用详解:定位 Windows 程序异常的利器
  • 计算机组成原理:指令周期