Click here to Skip to main content
Click here to Skip to main content

IncrediBuild - Fast C/C++ Compilation

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

Editorial Note

This article is in the Product Showcase section 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.

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.

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.

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.

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 http://www.xoreax.com.

License

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

About the Author

Uri Mishol
Web Developer
Israel Israel
No Biography provided

Comments and Discussions

 
Generaldistcc Pinmembergeoffrey_atkinso@hotmail.com5-May-05 16:16 
GeneralJetFrog vs. Incredibuild PinmemberMalcolm Wilkins7-Jun-04 4:03 
QuestionUses LZO? Pinmembercompiler2-Mar-04 12:37 
Generalgmake PinsussAnonymous26-Jul-03 22:53 
GeneralRe: gmake PinmemberUri Mishol27-Jul-03 4:25 
QuestionSymbian? PinmemberSaty15-Jul-03 0:48 
AnswerRe: Symbian? PinsussSteve/27-Aug-03 3:14 
GeneralThere is another tool. PinsussEugene Solovey25-Jun-03 15:55 
GeneralRe: There is another tool. Pinmemberaraud17-Apr-05 23:15 
GeneralXCode PinsussAnonymous25-Jun-03 9:37 
QuestionCan I suggest a new name for this product? PinsussAnonymous8-Jun-03 4:10 
AnswerRe: Can I suggest a new name for this product? PinmemberJohn M. Drescher7-Jul-03 13:09 
GeneralRe: Can I suggest a new name for this product? PinmemberDanPetitt22-Jul-03 9:20 
GeneralRe: Can I suggest a new name for this product? Pinmembermikejt425-Oct-07 23:40 
GeneralProblem with VC 6.0 Pinmemberdhoacz27-May-03 2:24 
GeneralIncrediBuild for MSVC .NET Released! PinmemberUri Mishol16-Apr-03 4:30 
GeneralReading all responces, I'm confused... Pinmemberigor196011-Apr-03 11:14 
GeneralRe: Reading all responces, I'm confused... PinmemberEpicBoy14-Apr-03 5:02 
GeneralRe: Reading all responces, I'm confused... Pinmemberigor196014-Apr-03 5:58 
GeneralGood but not as good as it should be PinsussAnonymous9-Apr-03 5:28 
QuestionCodeWarrior? PinmemberLivid8-Apr-03 20:18 
GeneralIncrediBuild v1.14 Beta Released PinmemberUri Mishol7-Jan-03 5:10 
GeneralSeems to work very well PinsussPatrick Frants3-Jan-03 2:32 
GeneralSome Problems PinsussHolger Gothan14-Oct-02 21:36 
GeneralRe: Some Problems PinsussAnonymous16-Oct-02 6:30 
GeneralI wonder PinsussAnonymous10-Oct-02 6:53 
GeneralRe: I wonder Pinmembersgarratt25-Jun-03 9:55 
GeneralRe: I wonder PinmemberHoudini26-Jun-03 3:20 
GeneralRe: I wonder PinmemberToby Opferman31-Mar-04 9:50 
GeneralRe: I wonder PinsussAnonymous12-May-05 8:50 
Generalwindows world ... PinsussAndrey Kubyshev9-Oct-02 3:02 
GeneralRe: windows world ... PinsussAnonymous28-Jun-03 8:52 
GeneralSimple but cool PinmemberNorm Almond8-Oct-02 6:35 
Generaltoo expensive, better to design code right PinmemberMarc Clifton8-Oct-02 1:56 
GeneralRe: too expensive, better to design code right PinmemberDaniel Turini8-Oct-02 2:08 
GeneralRe: too expensive, better to design code right PinmemberMarc Clifton8-Oct-02 3:25 
GeneralRe: too expensive, better to design code right PinmemberTaka Muraoka3-Jan-03 2:38 
GeneralRe: too expensive, better to design code right PinmemberMarc Clifton3-Jan-03 2:57 
GeneralRe: too expensive, better to design code right PinmemberTaka Muraoka3-Jan-03 2:59 
GeneralRe: too expensive, better to design code right PinmemberMarc Clifton3-Jan-03 3:03 
GeneralRe: too expensive, better to design code right PinmemberTaka Muraoka3-Jan-03 3:05 
GeneralRe: too expensive, better to design code right PinmemberMarc Clifton3-Jan-03 3:13 
GeneralRe: too expensive, better to design code right PinmemberJohn M. Drescher11-Apr-03 11:53 
GeneralI did this already 12 years ago PinmemberPatje7-Oct-02 21:51 
GeneralRe: I did this already 12 years ago PinmemberColin Davies7-Oct-02 22:12 
GeneralRe: I did this already 12 years ago PinmemberTim Smith8-Oct-02 1:56 
GeneralTested... PinsussAnonymous7-Oct-02 21:38 
GeneralHmm... Looks like an ad to me PinmemberMarc Clifton7-Oct-02 14:53 
GeneralRe: Hmm... Looks like an ad to me PinmemberPaul Selormey7-Oct-02 15:25 
GeneralRe: Hmm... Looks like an ad to me PinmemberGeorge7-Oct-02 15:28 

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

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

| Advertise | Privacy | Mobile
Web02 | 2.8.140721.1 | Last Updated 22 Nov 2002
Article Copyright 2002 by Uri Mishol
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid