如何为 C++ 智能感知引擎定义宏?
Posted
技术标签:
【中文标题】如何为 C++ 智能感知引擎定义宏?【英文标题】:How can I define macros for the C++ intellisense engine? 【发布时间】:2018-03-07 00:08:15 【问题描述】:在使用"Default"
intellisense 引擎时,我的 C++ 项目中的某些符号无法解析。事实证明,这是因为它们位于由 #ifdef
保护的标头中,该#ifdef
依赖于通过makefile 传递给gcc 的带有-D
标志的宏。我如何告诉智能感知引擎这些定义,以便它能够编译标头的这些部分?
【问题讨论】:
我认为您唯一能做的就是确保当前配置的定义与您使用 GCC 的定义相匹配... 你在哪里设置当前配置的定义? 【参考方案1】:到目前为止,其他答案有两个似乎不太容易解决的问题:
有时不同的源文件需要不同的编译器标志。
手动找出需要哪些编译器标志并手动添加它们可能会非常乏味。
幸运的是,VS Code 的 C/C++ 扩展支持 compile_commands.json 数据库。这存储特定于每个单独源文件的信息,包括定义、包含目录和其他编译器命令行标志。我刚刚在此处发布了有关如何生成并让 VS Code 使用它的更详细说明:https://***.com/a/59618515/12663912
【讨论】:
【参考方案2】:项目生成文件defines
设置在.vscode/c_cpp_properties.json
。
"configurations": [
...
"defines":[
"MYSYMBOL",
"MYVALUE=1"
]
], ...
这里有一些打开c_cpp_properties.json
的方法:
在 Intellisense 无法解析的 include 语句之类的内容上查找绿色曲线。将鼠标悬停在周围并单击出现的灯泡(它很小,有点像要单击的游戏)。它将在编辑器中打开项目配置文件。
同上,但将光标放在绿色曲线上并按Ctrl
+.
。
使用命令托盘:ctrl
+shift
+P
,然后选择C/C++: Edit configurations (JSON)
。
如果该文件已存在于您的 .vscode 文件夹中,请使用 File
->Open
打开它。
虽然修改c_cpp_properties.json
后vscode会重新处理设置,但我发现更改值时有时需要重新启动。
这里有基本的和不完整的信息:https://code.visualstudio.com/docs/languages/cpp
这是一个关于c_cpp_properties.json
文件本身的好链接:https://code.visualstudio.com/docs/cpp/c-cpp-properties-schema-reference
【讨论】:
如果您使用 compileCommands JSON 文件,它会使用 JSON 文件中的定义。有没有办法强制定义例如。 intellisense 引擎内部的 INTELLISENSE? 在较新版本的 VSCode 中:文件->首选项->设置->(搜索右侧面板)c_cpp > 默认值:定义 还有办法“取消定义”宏吗?【参考方案3】:现已添加此功能:https://github.com/Microsoft/vscode-cpptools/issues/304
您可以在 c_cpp_properties.json 文件中设置“定义”
【讨论】:
是否可以“自动”填充"defines"
与***.config
文件等文件的内容?比如"defines": ["$workspaceFolder/.config"],
以上是关于如何为 C++ 智能感知引擎定义宏?的主要内容,如果未能解决你的问题,请参考以下文章
如何为无状态 React 组件创建 TypeScript 类型定义?