How can I define macros for the C++ intellisense engine?

不想你离开。 提交于 2020-02-01 16:11:46

问题


When using the "Default" intellisense engine, some of the symbols in my C++ project cannot be resolved. It turns out that it's because they are in headers where they are guarded by an #ifdef that depends on a macro passed to gcc with the -D flag by the makefile. How can I tell the intellisense engine about these defines so that it is able to compile those parts of the header?


回答1:


Project makefile defines are set in .vscode/c_cpp_properties.json.

"configurations": [
{
   ...
   "defines":[
       "MYSYMBOL",
       "MYVALUE=1"
   ]
}
], ...

Here are some methods to open c_cpp_properties.json:

  1. Find a green squiggle on something like an include statement that Intellisense can't resolve. Hover around and click the lightbulb that appears (which is tiny and a bit of a game to click). It will open the project config file in the editor.

  2. Same as above, but put cursor on the green squiggle line and press Ctrl+..

  3. Use the command pallet: ctrl+shift+P, then select C/C++: Edit configurations (JSON).

  4. If the file already exists in your .vscode folder, open it with File->Open.

Although vscode will reprocess the settings after c_cpp_properties.json is modified, I found a restart is sometimes required when changing values.

There is basic and incomplete information here: https://code.visualstudio.com/docs/languages/cpp

This is a good link about the c_cpp_properties.json file itself: https://code.visualstudio.com/docs/cpp/c-cpp-properties-schema-reference




回答2:


This capability has now been added: https://github.com/Microsoft/vscode-cpptools/issues/304

you can set "defines" in your c_cpp_properties.json file




回答3:


The other answers so far have two issues that don't seem trivial to fix:

  1. There might be times where different source files need different compiler flags.

  2. It could be painfully tedious to manually figure out what compiler flags are necessary and manually add them.

Luckily, VS Code's C/C++ extension supports a compile_commands.json database. This stores information specific to every individual source file including the defines, include directories, and other compiler command line flags. I just posted a more detailed description of how to generate one and get VS Code to use it over here: https://stackoverflow.com/a/59618515/12663912



来源:https://stackoverflow.com/questions/46415076/how-can-i-define-macros-for-the-c-intellisense-engine

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!