找不到其他地方问了。
我有个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主流有三个
- cpptools
- clangd
- 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上打开项目,索引。回头有空再折腾一下。