DAY20 Optimizing VS Code for C/C++ Development on Ubuntu

Optimizing VS Code for C/C++ Development on Ubuntu

This article documents an optimized Visual Studio Code setup for C and C++ development on Ubuntu 22.04.

It includes formatter integrations, IntelliSense configuration, CMake workflow improvements, UI settings, and tips for smoother embedded development.

1. Introduction

VS Code is one of the most flexible editors for C and C++ development, especially when working on Linux or embedded systems.

With the right configuration, you can achieve:

  • Fast and accurate code completion (via clangd)
  • Consistent formatting (via clang-format)
  • Better CMake integration
  • Improved navigation using ctags
  • Cleaner UI and automatic file saving
  • Support for DeviceTree, Kconfig, Makefiles, and more

This post explains each configuration section and how it improves your workflow.


2. Formatter Configuration (clang-format)

The settings configure VS Code to automatically format C/C++ files using xaver.clang-format:

json 复制代码
"[c]": {
    "editor.defaultFormatter": "xaver.clang-format"
},
"[cpp]": {
    "editor.defaultFormatter": "xaver.clang-format"
},
"editor.formatOnSave": true

Why this helps

  • Ensures consistent code style across the project
  • Avoids messy diffs when committing to Git
  • Automatically aligns braces, indentation, and spacing

You can also adjust the formatting style with:

json 复制代码
"C_Cpp.clang_format_style": "Visual Studio"

For better consistency, changing this to "LLVM" or "Google" is recommended.


3. clangd Configuration (Recommended C/C++ language server)

A custom clangd binary is used:

json 复制代码
"clangd.path": "/home/linux/clangd_14.0.3/bin/clangd",
"clangd.arguments": [
    "--log=verbose",
    "--clang-tidy",
    "--background-index",
    "--inlay-hints=false"
]

What these features do

Feature Description
--clang-tidy Static analysis and code quality checks
--background-index Builds project index silently for faster navigation
--inlay-hints=false Disables inline hint clutter
--log=verbose Useful when debugging clangd issues

You also disabled Microsoft's IntelliSense engine:

json 复制代码
"C_Cpp.intelliSenseEngine": "disabled"

This ensures that clangd is the only backend providing completions---faster and more accurate.


4. CMake Workflow Optimization

json 复制代码
"cmake.options.statusBarVisibility": "visible",
"makefile.configureOnOpen": true,
"cmake.pinnedCommands": [
    "workbench.action.tasks.configureTaskRunner",
    "workbench.action.tasks.runTask"
]

Improvements

  • CMake status bar is always visible
  • Automatically configure Makefile projects when opening
  • Quick access to commonly used build/run commands

This setup is especially helpful in embedded projects running cross-compiled toolchains.


5. UI Enhancements

The settings apply a modern UI theme:

json 复制代码
"workbench.iconTheme": "vscode-icons",
"workbench.colorTheme": "One Monokai",
"workbench.preferredDarkColorTheme": "One Dark Pro"

And a clean development font:

json 复制代码
"editor.fontFamily": "JetBrains Mono, 'Courier New', monospace",
"editor.fontLigatures": true,
"editor.fontSize": 18

Why this matters

  • Ligature fonts improve readability for syntax-heavy languages like C++
  • Larger font reduces eye strain during long development sessions
  • Icons help distinguish file types clearly

6. Hex Editor Integration

json 复制代码
"workbench.editorAssociations": {
    "*.o": "hexEditor.hexedit"
}

This is extremely useful in:

  • Embedded firmware reverse engineering
  • Reading binary logs
  • Inspecting compiled ELF sections

Additional hex editor configuration:

json 复制代码
"hexeditor.columnWidth": 16,
"hexeditor.showDecodedText": true,
"hexeditor.defaultEndianness": "little"

7. ctags Indexing

json 复制代码
"ctags.regenerateOnSave": true,
"ctags.languages": ["C", "C++", "DTS", "Kconfig", "Make"]

Why this helps

  • Ultra-fast symbol search
  • Works even when clangd analysis is not available
  • Supports DeviceTree and Linux kernel environments

8. Embedded Linux / DeviceTree Support

json 复制代码
"devicetree.bindings": [
    "/home/linux/nfs/imx6/linux-imx-rel_imx_4.1.15_2.1.0_ga_alientek/Documentation/devicetree/bindings"
]

This enables:

  • Hover hints for DTS nodes
  • Validation of DeviceTree bindings
  • Faster debugging of ARM/SoC kernel configurations

Essential for i.MX6 / ARM-based embedded work.


9. Automatic Saving

json 复制代码
"files.autoSave": "afterDelay"

Useful when switching between Vim/terminal builds and VS Code.


10. Final Thoughts

The configuration shown here turns VS Code into a powerful C/C++ IDE on Ubuntu, suitable for:

  • Embedded Linux development
  • Kernel-level C work
  • CMake-based or Makefile-based projects
  • Bare-metal or cross-compiled toolchains
  • Modern C++ projects using clangd

I

相关推荐
WWJA王文举3 小时前
I²C通信完整流程详解:START、地址、ACK、数据、Repeated START和STOP一次讲透
c语言·开发语言
ltl4 小时前
实时 OS 巡礼:VxWorks、QNX、Zephyr 与 PREEMPT_RT
linux
zhanghaha13144 小时前
Python进阶教程:6_JSON 数据解析 —— 新手完全指南
开发语言·python·json
我是谁??4 小时前
Ubuntu22.04更换清华源
linux·运维·服务器
ShineWinsu5 小时前
对于C++:C++11中lambda、function、bind的解析
c++·面试·笔试·开发·lambda·bind·function
码匠许师傅5 小时前
【C++ 面试真题】聊聊 C++ 的拷贝构造与拷贝赋值
java·c++·面试
Shell运维手记5 小时前
Linux 常用基础命令学习笔记
linux·运维·笔记·学习·算法·github
qq_448011165 小时前
C语言中的动态内存分配
c语言·开发语言·php
动词ing6 小时前
【学习笔记】C语言(数组指针与指针数组+字符数组+函数+参数传递+字符串作为形参+递归函数+指针函数+回调函数+结构体嵌套+内存动态分配函数)
c语言·笔记·学习
旖旎夜光6 小时前
LeetCode 3:无重复字符的最长子串(滑动窗口) —— 题解
数据结构·c++·算法·leetcode·滑动窗口