c++ makefile + clangd 生成 compile_command.json

补充vscode + clangd 开发 c\c++

一个项目用makefile管理,工程很大,vscode的ms cpp tools代码跳转功能基本处于残废状态,

有想将makefile 迁移至cmake,但是大概看了下工程量很大,基本不现实,吃力不讨好;

没办法,继续clangd,clangd所需要的compile_command.json 再makefile下无法类似cmake一键生成,
不过makefile 上同样有一个工具可以利用,bear

bear安装,源码编译还是apt-install都可以,大部分linux系统都有对应的分发包。

ubuntu 20.04 :

sudo apt install bear

使用方法也很简单,基本原理好像就是使用LD_PRELOAD去捕获对应的命令。

就是在编译代码的命令前添加 bear即可

bear文档写的是,

bear -- <your-build-command>

但是我这边分发包版本bear 2.3.11,以上运行有问题。运行命令不需要破折号,如下

bear make xxxx -j18

需要make clean,重新编译,原理如上所述,所以必须全量编译才能拦截对应的命令。

有可能会提示

ld.so: object '/usr/${LIB}/bear/libear.so' from LD_PRELOAD 

命令里添加 -libear 强行指定库地址可以正常使用。

usage: bear [-h] [--version] [--verbose] [--cdb <file>] [--use-cc <path>]
            [--use-c++ <path>] [--append] [--libear LIBEAR]
            ...
 bear -l /usr/lib/x86_64-linux-gnu/bear/libear.so make -j18

这个问题可能跟系统有关系,我用了别人的docker 镜像,bear安装上去后运行移植提示以上错误,后面自己做一个重新写dockerfile做docker镜像,就不再提示了,仅供参考吧

你可能感兴趣的:(C\C++,杂谈,c++)