遇到此问题的场景:
winows 上编写 c++ 程序,使用 MSVC 编译器
先用 CMake 生成 Ninja 工程,再用 Ninja 可以导出 compile_commands.json ,里面包含了每个文件的编译指令
vscode 的 c/c++ 插件指定 compile_commands.json 之后,跳转定义、宏之类的就会比较准确
(clangd 解析 gcc 对应的 compile_commands.json 文件时很好用,但是无法解析 msvc 对应的 compile_commands.json)
使用 ninja 导出 compile_commands.json 编译指令文件时,用到了下面的命令:
ninja -t compdb > compile_commands.json
在 notepad++ 中查看,发现这个文件是用 "UTF-16 LE" 格式编码的
而其他源代码文件都是 utf-8 格式编码的,直接打开上面的文件显示为乱码
后面查找到下面的指令,可以在导出文件时,指定为 utf-8 bom 编码:
ninja -t compdb | out-file compile_commands.json -encoding utf8
系统自带的 powershell 是 v5.1 版本的,不支持导出 utf-8 No Bom 编码格式的文件,不过已经够用了
------------------------
看官方文档,powershell 7 的版本支持导出 utf-8 no bom 的格式
下载测试了下确实可以
ninja -t compdb | out-file compile_commands.json -encoding utf8NoBom
还有就是 powershell 7 的命令变成 pwsh.exe
简单试用了下,powershell 7 比 powershell 5.1 好用多了 !!!
这个命令补全,刚输入一个 n ,完整的命令就提示出来了~~~