例如在 source 目录下有 a b c common frame 五个文件夹,A B C 三个程序的主要源文件分别位于 a b c 三个目录,而 common 与 frame 下是一些通用的头文件与源文件,例如一些共用的函数、类的声明与定义;
A B C 三个程序分别有通过祖传工具生成的 makefile (不是 cmake ),我是利用 bear 根据这些 makefile 生成的 compile_commands.json
文件,分别记为 A.json 、B.json 、C.json ,我现在是把 A.json 放在 a 目录下,B.json 放在 b 目录下,C.json 放在 c 目录下;
但是这样的话,以 A 为例,在我印象里,vscode 的 clangd 无法跳转到位于 common 或者 frame 文件夹中的函数声明或者定义,只有声明以及定义在 a 文件夹中的函数可以直接跳转过去,我是 common 与 frame 文件夹中也放了一份 A.json ,这样才能跳转,但是印象里还是有不完善的地方。
求教一下万能的 v 友,有没有办法配置一下 clangd ,实现这些函数的正常跳转吗,尤其是跳转到 common 与 frame 中的函数。
这个文件夹分布是简化的,实际上进程不止 A B C 三个,共用的文件夹也不止两个。
1
z1nke 2 天前
有工程根目录吗?如果有的话使用 bear 尝试在根目录进行构建,生成一个完整的 `compile_commands.json`
如果不行,可以尝试在 source 目录中写一个构建脚本,统一构建 a, b, c, common, frame 这些目录中的源码,生成一个完整的 `compile_commands.json` |
![]() |
2
zwyyy456 OP @z1nke
工程根目录是有的,但是 makefile 并不在根目录中,大概是 project/src 与 project/target 的结构,其中 target 下是一个个以程序名命名的文件夹,makefile 在这些文件夹中; src 下有一个个以程序名命名的文件夹,以及一些其他文件夹(里面的源文件与头文件可能很多程序编译时都会用到); bear 在根目录进行构建,是要在 project 目录下构建吗? bear 支持同时指定多个 makefile 文件来生成 compile_commands.json 吗 |
3
jdz 1 天前 via Android
bear -- make 自动输出
|
4
jdz 1 天前 via Android
不好意思没认真看题,忽略吧
|
![]() |
5
exch4nge 1 天前 via iPhone ![]() 1. bear — 后面应该可以接多个 make 命令
2. 上面的不行,根上也可以建一个 makefile ,内容是执行子目录的 make 命令 |