说一个vscode的问题...

找不到其他地方问了。

我有个linux下c代码的项目。copy到Mac里面,想用vscode索引看代码。但是发现vscode无法从一个函数 “跳转到引用”。

插件装了 c/c++ intelligence。c/c++ extension pack。c/c++ themes。也就是微软自家的那三个。

后来搜了一下,说是vs的跳转需要用gnu global。装了c++ intelligence (austin)。可以了。

感情vscode仍然是用的global来索引?那我用emacs不就完了么?

是不是remote方式直接远程linux中的源码,就不依赖global了?刚试用vscode,有点搞不太明白。哪位给介绍一下?

需要生成 Compilation Database

也就是 compile_commands.json

具体怎么生成可以用CMake或者bear等工具。

Compilation database — Sarcasm notebook

当然你的代码必须要能在MacOS上编译才能用这种方法。

我是在macos上使用 multipass 创建 ubuntu 虚拟机的方式开发的,因为项目只能在linux上编译

这份代码是Linux下编译的项目。我用vscode的远程模式打开Linux上的项目,索引就没问题了。

没太明白vs code用依赖什么来作索引。是编译器?还是它自身的分析功能?

用的是LSP(language server protocol),和编辑器无关。你现在用的是微软官方提供的cpptools,应该是自己生成了语法分析树然后基于语义进行补全跳转,相当于编译了一遍。

C/C++ 目前的Languare server主流有三个

  1. cpptools
  2. clangd
  3. ccls

我自己用clangd

如果它用自己的lsp,那按理说在mac里面也应该可以索引才对。

只要你能在macos里生成compile_commands.json这个文件,languare server是通过compile_commands.json来知道如何寻找头文件的。

当然这三个 languare server 都有方法自己手动指定头文件的位置,只是这种方法太繁琐了。具体方法看对应languare server的官方文档

vscode 的插件设置里可以指定compile_commands.json的位置

例如linux kernel 的仓库下就专门有一个脚本生成 compile_commands.json 的,你也可以自己写脚本生成

多谢。了解。 我暂时先remote到linux上打开项目,索引。回头有空再折腾一下。