V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zwyyy456
V2EX  ›  C++

一个项目下有多个 cpp 程序的源文件以及多个程序共用的源文件与头文件, vscode 的 clangd 插件与 compile_commands.json 该如何配置

  •  
  •   zwyyy456 · 2 天前 · 578 次点击

    例如在 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 三个,共用的文件夹也不止两个。

    6 条回复    2025-04-01 22:11:13 +08:00
    z1nke
        1
    z1nke  
       2 天前
    有工程根目录吗?如果有的话使用 bear 尝试在根目录进行构建,生成一个完整的 `compile_commands.json`
    如果不行,可以尝试在 source 目录中写一个构建脚本,统一构建 a, b, c, common, frame 这些目录中的源码,生成一个完整的 `compile_commands.json`
    zwyyy456
        2
    zwyyy456  
    OP
       2 天前
    @z1nke
    工程根目录是有的,但是 makefile 并不在根目录中,大概是 project/src 与 project/target 的结构,其中 target 下是一个个以程序名命名的文件夹,makefile 在这些文件夹中; src 下有一个个以程序名命名的文件夹,以及一些其他文件夹(里面的源文件与头文件可能很多程序编译时都会用到);
    bear 在根目录进行构建,是要在 project 目录下构建吗?
    bear 支持同时指定多个 makefile 文件来生成 compile_commands.json 吗
    jdz
        3
    jdz  
       1 天前 via Android
    bear -- make 自动输出
    jdz
        4
    jdz  
       1 天前 via Android
    不好意思没认真看题,忽略吧
    exch4nge
        5
    exch4nge  
       1 天前 via iPhone   ❤️ 1
    1. bear — 后面应该可以接多个 make 命令
    2. 上面的不行,根上也可以建一个 makefile ,内容是执行子目录的 make 命令
    zwyyy456
        6
    zwyyy456  
    OP
       1 天前
    @exch4nge 方案 2 可行,早上已经弄好了,谢谢。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1044 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 19:19 · PVG 03:19 · LAX 12:19 · JFK 15:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.