VSCode是最近用的很顺手的文本编辑平台。相对轻量,扩展能力也非常强。
但最近在用VSC写C++的时候遇到了不大不小的麻烦:一般C/C++的工具集都会用微软默认的“C/C++” 工具包。这个工具包大杂烩功能上该有的都有,但真的烂。bug不少,导航内容会错误,Debugger有时追踪不到vector的内容,最严重的是在解析引用地址时似乎会陷入死循环,cpptools占用CPU 100%,非常恼人。
于是决定换个环境,全面使用LLVM系的拓展插件以及环境工具。
本来以为安装了插件就解决了问题,但发现随之而来的是一系列的麻烦事。由于VSC默认会用Xcode下的 command line tools,这其中似乎没有clangd。引用分析以及导航工具还是很需要的,这个得要有。虽然在安装clangd插件的时候提示了直接下载clangd,但由于我的MacOS版本还是High Sierra(也一时半会儿不准备升级),直接下的二进制文件没法用。
于是还是去brew了整套LLVM,为了防止冲突还必须要卸载Xcode。无所谓了,反正一般也不会用。于是这么一折腾,就要为VSC全部重新配置各个地址了。
首先是编译器,由于我的开发内容的入口是cmake,于是要为cmake手动指定编译器
tasks.json 文件的bash命令添加 -D 对应的变量。虽然理论上可以直接在cmake文件里直接设定覆盖 CMAKE_C_COMPILER 变量的值,但 stack overflow 上都说不推荐,目前没有深究具体原因,还是直接在参数上添加了。
"command": {
"cd build && cmake -D CMAKE_C_COMPILER=/usr/local/opt/llvm/bin/clang -D CMAKE_CXX_COMPILER=/usr/local/opt/llvm/bin/clang++ .. && make"
}
Debugger部分,为 launch.json 文件添加对应操作系统的debugger以及路径
"osx": {
"MIMode": "lldb",
"miDebuggerPath": "/usr/local/opt/llvm/bin/lldb"
}
最麻烦的还是clangd,在setting里找到相应配置,修改clangd的地址。
之后头疼的问题来了,clangd一直提示找不到标准库头文件。我找了很久在哪里修改库地址但都无功而返。
https://clangd.llvm.org/troubleshooting.html 官方说明文档里提到可能需要手动指定编译器地址,于是在 clangd 的 Arguments 添加上--query-driver 指定到 clang++ 地址,才终于解决了这个问题。真没想到标准库的地址会和编译器绑定上。
还需要为 clangd 添加 includes 数据来让 clangd 理解项目的引用结构。https://clangd.llvm.org/installation.html 里面有说明各种生成方法。cmake可以直接将参数CMAKE_EXPORT_COMPILE_COMMANDS设为1便会在默认地址生成供 clangd 使用的compile_commands.json 文件。这个文件要放在项目根目录下,由于我的项目 cmake 生成的东西都放在了build文件夹里,可以建立个符号链接(ln -s)连过去就好了。
大功告成,用起来又快又舒服,心情一下子好了