dev c++ 代码补全_使用 ccls 进行 C++ 代码补全

前言

最近使用 C/C++ 开发,在 Emacs 下使用 cmake 作为编译工具,结合 ccls 进行代码补全,有着不错的体验,于是记录一下。

ccls 介绍

ccls 是基于cquery[1]C/C++/Objective-C 的代码补全的工具,它实现了 C/C++/Objective-C 的Language Server Protocol[2]的服务端。支持代码补全,代码的引用查找和跳转,有着良好的体验。

我使用 ccls 是由于它能支持 lsp ,可以在 Emacs 中使用。当然也是支持 AtomVimVSCode 等编辑器的。

安装ccls

Mac

mac 下安装 ccls 使用 brew install ccls 十分的方便,但是这个版本还停留在 0.20190823.6 实在是太老旧了。使用过程中发现并不能很好的工作,建议采用源码编译。

编译过程如下

cmake &llvm

ccls 的编译需要 cmakellvm ,所以在编译之前需要安装 cmakellvm

brew install cmake llvm

使用 brew 安装的 llvm 路径在 /usr/local/Cellar/llvm/10.0.1 ,编译 ccls 会用到。

编译ccls

git clone --depth=1 --recursive https://github.com/MaskRay/ccls
cd ccls
cmake -H. -BRelease -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=/usr/local/Cellar/llvm/10.0.1/lib/cmake -DUSE_SYSTEM_RAPIDJSON=off
cmake --build Release --target install

ccls 会被安装到 /usr/local/bin/ccls

其中 -DCMAKE_PREFIX_PATH 需要换成你的 llvm 的安装路径。

这样 ccls 就编译好了。

Linux

我所使用的 Linux 发行版是 Manjaro ,所以安装起来就非常方便了。

sudo pacman -S ccls-git

命令执行完,也就安装好了,非常省事。

其它 Linux 发现版,可以参考 Build · MaskRay/ccls Wiki[3]

为项目配置 ccls 补全

当我们装好 ccls 后,就可以使用 Emacs 结合 lsp 打开 C/C++ 的项目,在项目的根目录下就会生成 .ccls-cache 的文件夹。这就表示当前项目被 ccls 识别了。

做完上面之后,我们打开文件,会发现许多文件都会找不到头文件,补全也不完整,甚至连 iostream 都找不到,这就很纳闷了。

我的 C/C++ 项目采用的是 cmake 作为编译工具,所以在查找官网资料后,发现只要在使用 cmake 的时候加上 -DCMAKE_EXPORT_COMPILE_COMMANDS=On ,然后把 compile_commands.json 放到根目录就行。具体操作如下

mkdir build && cd build
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=On ..
cd ..
ln -s build/compile_commands.json

-DCMAKE_EXPORT_COMPILE_COMMANDS 会告诉 cmake 把编译的指令都导出到 compile_commands.json 中,当 ccls 解析 compile_commands.json 后就知道源码在哪里了,知道去哪里找头文件等等。

除了在命令行加上 -DCMAKE_EXPORT_COMPILE_COMMANDS 参数外,还可以在 cmake 中设置,这样就可以避免每次编译都要输入,或者忘记。

set(EXPORT_COMPILE_COMMANDS ON)

如果你不是使用 cmake 作为编译工具可以参考 Project Setup · MaskRay/ccls Wiki[4]

参考资料

[1]

cquery: https://github.com/jacobdufault/cquery

[2]

Language Server Protocol: https://langserver.org/

[3]

Build · MaskRay/ccls Wiki: https://github.com/MaskRay/ccls/wiki/Build

[4]

Project Setup · MaskRay/ccls Wiki: https://github.com/MaskRay/ccls/wiki/Project-Setup

478c96da93d355157428df8c5e3b455b.gif

 往期推荐 

18ab6138f1046c7ecbdc9ed54d70bcd5.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值