最近下载了某开源软件的源码,其使用 CMake 构建。在使用 VS Code 浏览源码时,发现一个奇怪的现象:

1. CMake构建没问题,断点调试也OK;

2. 能通过F12快捷键跳转头文件、函数、类等定义;

3. 一些 #if 条件宏未正确设置,导致代码高亮不对;

4. 许多能正常跳转的头文件标红,光标移过去提示 “#include errors detected based on information provided by the configurationProvider setting. (C/C++ 1696)

该错误不太影响正常使用,但是总觉得别捏:#if 宏条件编译的正确代码,几乎都是disable状态被暗色显示。

参考 StackOverflow上的这个帖子 顺利解决了问题,其操作步骤为:

1. Windows系统按 ctrl+shift+p,MacOS按 command+shift+p,在命令窗口里输入 edit configurations ,选择json那一项,按回车按钮打开工程的配置文件:

打开 c/c++ json配置文件

2. 将文件中的 configurationProvider 的值从 “ms-vscode.cmake-tools” 改成 “ms-vscode.cpptools”:

修改C++工程配置工具

3. 保存配置文件,再返回源代码,能看到宏定义、头文件等已经正确显示了。

除此之外,一些外部依赖包的头文件路径可能不正确,例如找不到 mpi.h,此时可以编辑该配置文件,将 MPI 的头文件路径加上:

添加自定义头文件包含路径

如果存在同名头文件,也可以通过调整顺序实现优先级的调整。