Click here to Skip to main content
15,565,601 members
Articles / Programming Languages / C++
Posted 6 Oct 2002


10 bookmarked

IncrediBuild - Fast C/C++ Compilation

21 Nov 20026 min read
IncrediBuild, integrated with Microsoft Visual C++, silently distributes compilation tasks across workstations in the network, cutting build times down by 90% and more.

This article is in the Product Showcase section for our sponsors at CodeProject. These articles are intended to provide you with information on products and services that we consider useful and of value to developers.

This is a continuation in our series of showcase reviews for our sponsors at CodeProject. These reviews are intended to provide you with information on products and services that we consider useful and of value to developers. They also allow you to discuss a product and interact with the manufacturer or provider on a one-to-one basis.

IncrediBuild Cuts C/C++ Build Time Down by 90%

How many times have you found yourself blankly staring at your screen monitor, waiting for MSVC to compile your latest code modifications? Are you familiar with that small pause of hesitation before making changes in a header file that you know will cause a near full rebuild of the project?

Slow compilation time has always been one of the C/C++ programming language's weakest spots. Whether it's a few hours wait for a full product build, or 10 minutes spent several times a day waiting for an incremental build to finish on a developer workstation - the effect is frustration, loss of productivity and wasted time.

Surprisingly, this has almost become a fact of life for most developers. Although the introduction of precompiled headers along with the improvement in P.C. hardware have improved the situation to some extent (thankfully, 5-10 hour builds are not the common case anymore), a medium to large scale software project typically wastes hundreds of precious developer hours yearly on compilation alone.

IncrediBuild, by Xoreax Software, introduces a unique and effective approach to this problem. Integrated with Microsoft Visual C++, it silently distributes compilation tasks across workstations in the network, cutting build times down by 90% and more.

Image 1

One of the views in IncrediBuild's "Build Monitor" visually displays the distributed compilation progress. Each file is colored according to its compiler message severity.

Distributed Compilation

IncrediBuild is based on a peer-to-peer model. An "Agent" component is installed on different machines in the network, while a central component called the "Coordinator" is responsible for managing the compilation workload. When a build is initiated by an IncrediBuild Agent user, Agents in remote machines are assigned as compilation resources for that build. Source files are then compiled by those Agents, and the build output is returned to the building machine. Linking is finally performed on the machine that initiated the build.

The task of assigning different Agents to currently running builds is performed by the Coordinator. Based on knowledge of each Agent computer's hardware specifications, current CPU availability and other parameters, the Coordinator sees that at each point in time, a build will utilize the strongest, most available Agents. Moreover, when several builds are running at one time, the Coordinator's job is to distribute the available computing power evenly among the building Agents.

When functioning as compilation resources for remote builds, Agents perform compilation tasks in a low priority process, in order to maintain the computer's level of responsiveness. This is made even more effective by the Coordinator's ability to take into account each machine's availability, effectively assigning busier machines last (in fact, the second a machine reaches a certain minimal level of activity, it will immediately cease any remote compilation activity). Finally, at any given time, an IncrediBuild Agent user can temporarily disable the Agent on his/her machine, keeping the machine's resources out of other Agents' reach.

Image 2

The IncrediBuild Coordinator application acts as a "control center" for the IncrediBuild environment. Any build activity taking place is displayed, along with other useful data.

Using IncrediBuild

IncrediBuild builds can be run from 3 distinct interfaces:
  • The Microsoft Visual C++ IDE - IncrediBuild adds an additional menu and toolbar to the IDE, allowing builds to be run directly from the development environment. Standard MSVC builds can still be run at any time, and IncrediBuild does not override any MSVC functionality.
  • The IncrediBuild command line interface - IncrediBuild features a strong command line interface that allows builds to be run from scripts, third party tools and console windows.
  • The IncrediBuild tray-icon menu - IncrediBuild's tray-icon menu allows for builds to be run without requiring the MS Visual C++ IDE to be open. Simply browse for a DSP/DSW file (or select one from the recent builds list) and start a build.

When running IncrediBuild builds, MSVC's standard output display is replaced by the IncrediBuild "Build Monitor". This unique display contains everything you need to monitor your build's progress and easily locate warning/error messages. A visual display of the distributed compilation process shows each compiled source file as a progress bar, colored according to the severity of compiler messages generated for that file. The build output can be displayed for the entire build as well as separately for each configuration (see below). To top it all off, extra features like a build progress bar and easy navigation to next/previous error message are there to make life even easier.

Image 3

When used from within the MSVC IDE, a docked Build Monitor window displays the build results. Shown here is the Build Monitor's per-project configuration output view, along with build progress bars for each configuration.

A Word on Reliability

One of the most common concerns new IncrediBuild users have is: "How can I be sure my builds will come out right?". This is particularly an issue when distributing compilation over machines with different environments, operating systems, DLLs and COM objects installed.

IncrediBuild tackles this issue with the concept of a "Virtual Environment". When compiling for a remote Agent, IncrediBuild runs the compilation within a protected mirror image of the building machine's environment. This has several pluses. For a start, whenever the compiler references a source file, type library, registry entry, etc. - it is guaranteed to operate identically to a similar operation on the building machine. This also means that IncrediBuild requires no manual configuration whatsoever to work, since it will always use the building machine's environment. Another benefit is that IncrediBuild does not use the machine's file system to store remote source files, but rather uses its own source file caching mechanism, saving the trouble of worrying about different source file versions appearing in your folders.

Just to give an example that stresses how far the "Virtual environment" concept has been taken: Even the compiler version used for remote compilations is mirrored from the building machine. In fact, in order to use an IncrediBuild Agent on a machine used solely as a compilation resource (and not to initiate builds), there's no need for MS Visual C++ to be installed, since IncrediBuild will always disregard the locally installed version and use the mirrored version.

Closing Words

IncrediBuild offers the chance to instantly improve development productivity and the quality of code. Depending on the length of your project builds, the effect can be anything from a substantial improvement to a radical boost of a development team's effectiveness. The fully functional 30-day trial version available for download on the Xoreax Software web site offers you the chance to try it out for yourself (setup is a matter of minutes).

For more details, the IncrediBuild download page and order information visit


This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

Written By
Web Developer
Israel Israel
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

GeneralI highly recommend Pin
Jason.King.Work@gmail.com7-Oct-02 14:08
Jason.King.Work@gmail.com7-Oct-02 14:08 
GeneralRe: I highly recommend Pin
Paul Selormey7-Oct-02 15:50
Paul Selormey7-Oct-02 15:50 
GeneralRe: I highly recommend Pin
Jason.King.Work@gmail.com7-Oct-02 16:09
Jason.King.Work@gmail.com7-Oct-02 16:09 
GeneralRe: I highly recommend Pin
Paul Selormey7-Oct-02 16:23
Paul Selormey7-Oct-02 16:23 
GeneralRe: I highly recommend Pin
Anonymous8-Oct-02 2:39
Anonymous8-Oct-02 2:39 
GeneralRe: I highly recommend Pin
Paul Selormey8-Oct-02 2:57
Paul Selormey8-Oct-02 2:57 
GeneralRe: I highly recommend Pin
Daniel Turini8-Oct-02 3:11
Daniel Turini8-Oct-02 3:11 
GeneralRe: I highly recommend Pin
VanLazarus11-Oct-02 12:29
VanLazarus11-Oct-02 12:29 
You honestly think that a complete rebuild of the project only needs to be done by the project manager once a week? Our last project contained 3364 source files.

Even though we had a team of 9 programmers that tried very hard to maintain clean and modular design, complete rebuilds were common (a few times a day on each programmer's machine, full builds took about 10-15 minutes). Besides, if a programmer changes "math.h", you're going to incur a near rebuild no matter how modular your code is.

In an ideal world where teams are given the correct amount of time to complete a project, it might be possible to maintain a project that does not degrade in cleanliness throughout development. But in my 9 years in the software industry, this has never been the case. The intense pressure to reach the target features combined with the requirement for artists and designers to work on elements of the project before the coders have completed those areas creates many challenges that introduce cyclic header file inclusions, obvious hacks, and redundant function creation.

That being said, our last project was mostly bug free due to our religious use of asserts and adherence to a standard coding style... but compile times were always an issue.

Imagine working 80 hour work weeks for 3 months straight with no days off for 4 weeks at a time... Then tell me that a programming team is incompetent if their project code base has a few rough edges near the end. I don't know of any games made that didn't have code degrade during the final months of development (if not from the 1/3 done stage Smile | :) ).

Many man-hours were lost watching the code compile. This tool seems very useful and I'd like to check it out. The cost for this tool would be recovered in less than a month by the time saved.

Michael Gyori
Barking Dog Studios
Vancouver, BC
GeneralRe: I highly recommend Pin
Jason.King.Work@gmail.com8-Oct-02 8:37
Jason.King.Work@gmail.com8-Oct-02 8:37 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.