Improve Intellisense Library Discovery And Build Speed

by Visual Micro 14. January 2016 23:32

Jan 2017 - Licenced users have a new Parallel Build option. The option builds all files in each folder at the same time (as usual, only when they need to be built). 

Feb 2017 - All users now benefit from intelligent caching of the library discovery mechanisim described below. The 2nd time a project is compiled will be much faster and even faster the third time. Release compilation is always 1-1.5 seconds faster than debug.

15th January 2016 Visual Micro adopted (optional/default) the Arduino 1.6.6 + gcc based library discovery system.

  • This feature does not assist with intellisense, only with compile. Please read the important note at the bottom of this page about intellisense for Arduino libraries


The new system allows library authors to reference other libraries without need to #include those libraries in the project_name.ino

An example is the Microsoft AzureIoT Arduino Library that reference the SPI, RTCZero and WiFi libraries.

This new automatic discovery of related libraries is a useful feature for new users but causes significant delay during compilation.

Experienced users can switch off the "library in library" includes discovery by unchecking the "Visual Micro>Deep Library Search" menu item.

The setting is per project. A global setting might be implement in future versions based on user feedback.

The difference in compile time between an empty AzureIot library project 1) with the new Arduino 1.6.6+ system is 7 seconds and 2) without the new system using the older Arduino rexex system.

Using the older system by unticking the "Deep Library search" menu item and then adding #includes for the required libs (to the project_name.ino) will compile in less than 1 second.


The following applies to versions of Visual Micro older than 1607.7

Important: Intellisense does NOT use the deep search facility. ALL libraries that are used by the .ino or .cpp code must be #included in the project_name.ino

Viual Micro uses the older regex system to determine includes for intellisense purposes. This is because it can take many seconds to scan library sources which would disrupt the Ide during code writing.

Hopefully as the next few months progress we manage to optimize and add intelligence to the "deep scan" enabling its use for intellisense.

In the meantime, if intellisense is not discovering libraries, please #include any required libraries directly into the project_name.ino code. (Then click Save or Build to force an intellisense refresh)