引言
在现代软件开发中,智能提示可以极大提高代码编写的效率。然而,随着项目的复杂性增加,很多智能提示可能无法有效跳转。为了解决这个问题,我们可以使用LLVM的Clangd与compile_commands.json
结合来改善这一体验。
1. Clangd简介
Clangd是LLVM项目中的一部分,它为C/C++提供了强大的代码分析和智能提示功能。它相较于GCC的G++,更像是一个前端工具,主要负责代码解析和语义分析。关于Clangd的详细信息和安装指南,可以访问它的官方网页。
2. 生成compile_commands.json
在Clangd的官方网页中,推荐使用一个名为bazel-compile-commands-extractor
的插件来生成compile_commands.json
文件。这个插件的开源地址为GitHub – hedronvision/bazel-compile-commands-extractor。
2.1 在WORKSPACE中添加配置
在你的Bazel项目的顶层目录(top dir)中的WORKSPACE
文件中,添加以下内容:
# Hedron's Compile Commands Extractor for Bazel
# https://github.com/hedronvision/bazel-compile-commands-extractor
http_archive(
name = "hedron_compile_commands",
url = "https://github.com/hedronvision/bazel-compile-commands-extractor/archive/1e08f8e0507b6b6b1f4416a9a22cf5c28beaba93.tar.gz",
strip_prefix = "bazel-compile-commands-extractor-1e08f8e0507b6b6b1f4416a9a22cf5c28beaba93",
)
load("@hedron_compile_commands//:workspace_setup.bzl", "hedron_compile_commands_setup")
hedron_compile_commands_setup()
Bazel Workspace的作用与http_archive
语法
- Bazel Workspace:定义了一个Bazel项目的根目录,包含了构建的所有依赖和配置。
- http_archive:用于从网络获取外部库或工具,并将其作为依赖项。你需要根据需要替换
url
中的提交哈希,以确保使用最新版本。
2.2 在项目中添加refresh_compile_commands
在你指定的工程中,添加以下内容:
load("@hedron_compile_commands//:refresh_compile_commands.bzl", "refresh_compile_commands")
refresh_compile_commands(
name = "refresh_compile_commands",
targets = ["//apps/sensor_fusion/tros/src:module_fusion"]
)
load
的作用与hedron_compile_commands
的交互
- load:用于加载外部的Bazel规则或功能,以便在当前文件中使用。
- hedron_compile_commands:通过加载相应的规则,可以方便地更新和生成
compile_commands.json
文件。
3. 安装Clangd
要使用Clangd,你需要先安装它,目前我们使用的是clangd-12
版本。
3.1 在VSCode中安装LLVM的Clangd插件
在VSCode中搜索并安装“LLVM”插件,这样可以启用Clangd的功能。
3.2 配置settings.json
最后,在VSCode的全局或工作区的settings.json
中添加以下配置:
"clangd.path": "/usr/bin/clangd-12",
"clangd.arguments": [
"--log=verbose",
"--pretty",
"--all-scopes-completion",
"--completion-style=bundled",
"--cross-file-rename",
"--header-insertion=iwyu",
"--header-insertion-decorators",
"--background-index",
"--clang-tidy",
"--clang-tidy-checks=cppcoreguidelines-*,performance-*,bugprone-*,portability-*,modernize-*,google-*",
"-j=2",
"--pch-storage=disk",
"--function-arg-placeholders=false",
"--compile-commands-dir=/path/to/your/compile_commands"
]
clangd.arguments
字段解释
--log=verbose
:生成详细日志。--pretty
:使输出的JSON文件更美观。--all-scopes-completion
:提供全局补全建议。--completion-style=bundled
:采用打包的建议风格。--cross-file-rename
:支持跨文件重命名变量。--header-insertion=iwyu
:自动补充头文件。--background-index
:在后台自动分析文件。--clang-tidy
:启用静态检查功能。--clang-tidy-checks=...
:配置静态检查的规则。-j=2
:同时开启的任务数量。--pch-storage=disk
:指定预编译头的位置。--compile-commands-dir=/path/to/your/compile_commands
:指定compile_commands.json
文件的目录。
结语
通过以上步骤,你可以在VSCode中使用Clangd来提升代码编写的智能提示功能,极大地改善开发效率。
发表回复