Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
updated doc and screenshots
  • Loading branch information
ronglums committed Dec 7, 2017
commit 03c6c4df1d1c39a8b2a5522a8df96effeb3c2196
32 changes: 17 additions & 15 deletions Documentation/Getting started.md
Original file line number Diff line number Diff line change
@@ -1,37 +1,39 @@
# Getting started
# Configuring includePath for better IntelliSense results

## Configuring includePath for better IntelliSense results
This page describes how to configure include paths for folders containing C or C++ files to get the full IntelliSense experience. If you're seeing the following message when opening a folder in VS Code, it means the C++ IntelliSense engine needs additional information about the paths in which your symbols are located.

This page describes how to configure include paths for folders containing C or C++ files to get better IntelliSense experience. If you're seeing the following message when opening a folder in VS Code, it means the C++ IntelliSense engine needs additional information about the paths in which your symbols are located.
![Configure includePath for better IntelliSense](https://github.com/Microsoft/vscode-cpptools/raw/master/Images/configure%20includepath.jpg)

![Configure includePath for better IntelliSense](https://github.com/Microsoft/vscode-cpptools/raw/master/Images/Configure%20includePath.PNG)
## Where to configure the include paths

#### Where to configure the include paths

When you open a folder, the extension will attempt to locate your system headers based on your operating system, but it does not know about any auxiliary libraries that your project depends on. You can specify the remaining paths by either using the `"C/Cpp: Edit Configurations"` command in the command palette, or by selecting `"Edit "includePath" setting"` in the lightbulb menu (see the screenshot below). The quickiest way to locate the lightbulb is to scroll to the top of the source file and click on any green squiggle, which usually shows up at the first line in the file).
When you open a folder, the extension will attempt to locate your system headers based on your operating system, but it does not know about any auxiliary libraries that your project depends on. You can specify the remaining paths by either using the `"C/Cpp: Edit Configurations"` command in the command palette, or by selecting `"Edit "includePath" setting"` in the lightbulb menu (see the screenshot below). The quickiest way to locate the lightbulb is to scroll to the top of the source file and click on any green squiggle, which usually shows up at the first line in the file.

![lightbulb menu "Edit "includePath" setting"](https://github.com/Microsoft/vscode-cpptools/raw/master/Images/Lightbulb.png)

This creates or opens a file called **c_cpp_properties.json** in the .vscode directory in the opened folder in your workspace. In this file, you can specify the paths to the headers that your project depends on. Look for the section where your current configuration is defined (by default there's one configuration per OS, such as "Win32 or "Mac"), and add your paths in the `"includePath"` setting and defines in the `"defines"` setting. For example, the following screenshot shows a snippet of the file specifying path for the Mac configuration.

![c_cpp_properties file snippet](https://github.com/Microsoft/vscode-cpptools/raw/ronglu-edit/Images/c_cpp_properties%20file.PNG)

If your build system is able to produce a compile_commands.json file, which can be auto-generated by build systems such as CMake and Ninja, the extension can get the information for the `"includePath"` and `"defines"` from that. Set the `"compileCommands"` property to the full path to your compile_commands.json file and the extension will use that instead of the `"includes"` and `"defines"` properties for IntelliSense.
![use compileCommands setting](https://github.com/Microsoft/vscode-cpptools/raw/ronglu-edit/Images/compile_commands.png)
You can either hover over the green squiggles to see the message in the tooltip, or open the Problems window to understand which headers the IntelliSense engine is unable to open.

#### Understand which headers can't be located
![include error message](https://github.com/Microsoft/vscode-cpptools/raw/master/Images/Include%20errors.png)

To figure out which headers you need to specify paths for, you can either hover over the green squiggles to see the message in the tooltip, or open the Problems window to see the errors listed there. The error messsages show which headers the IntelliSense engine is unable to open - it could be the headers that are being included directly or the headers that the included headers are dependent on. The following screenshot shows an example of the error message being shown in the tooltip as well as the Problems window.
## Tips for setting up include paths quickly

![include error message](https://github.com/Microsoft/vscode-cpptools/raw/master/Images/Include%20errors.png)
Manually configuring includes and defines could be time-consuming and sometimes cumbersome. It is recommended to try the following techniques to get the include paths setup automatically before resorting to manually configuring in the **c_cpp_properties.json** file.

#### Use the lightbulb suggestions to auto-resolve includePath
#### 1. Use the lightbulb suggestions to auto-resolve includePath

You can also leverage the lightbulb path suggestions lightbulb to auto-resolve the included file. When you open a folder, the extension will **recursively** search for potential include paths that match the header files your code is using based on the paths set by the `"browse.path"` setting in **c_cpp_properties.json**. Click on the green squiggles under #include statements and a lightbulb will appear and offer suggestions of paths that will allow IntelliSense to resolve the included file.

![lightbulb suggestions](https://github.com/Microsoft/vscode-cpptools/raw/ronglu-edit/Images/lightbulb%20suggestion.png)

#### Verify the include paths are correctly resolved
#### 2. Use compile_commands.json file to supply includePaths and defines information

If your build system is able to produce a compile_commands.json file, which can be auto-generated by build systems such as CMake and Ninja, the extension can get the information for the `"includePath"` and `"defines"` from that. Set the `"compileCommands"` property to the full path to your compile_commands.json file and the extension will use that instead of the `"includes"` and `"defines"` properties for IntelliSense.
![use compileCommands setting](https://github.com/Microsoft/vscode-cpptools/raw/ronglu-edit/Images/compile_commands.png)

## Verify the include paths are correctly resolved

There are two ways to verify that the include paths are correctly resolved:

Expand All @@ -40,7 +42,7 @@ There are two ways to verify that the include paths are correctly resolved:

This indicates that the IntelliSense engine has got the include paths resolved so you can start enjoying the full IntelliSense for your C or C++ code for the current translation unit. Note that you may still see errors on other files if they belong to a different translation unit that requires additional include paths to be configured.

#### See Also
## See Also

[IntelliSense engines](https://github.com/Microsoft/vscode-cpptools/blob/ronglu-edit/Documentation/LanguageServer/IntelliSense%20engine.md)

Expand Down
Binary file modified Images/Include errors.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified Images/Lightbulb.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Images/configure includepath.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.