[Home]Boost.Build V2/MicrosoftVCProjMigration

BOOST WIKI | Boost.Build V2 | RecentChanges | Preferences | Page List | Links List

Microsoft VCProj Migration

This guide is for people who are familiar with using the Microsoft IDE to create projects and solutions and want to migrate to BJam/Boost?.Build v2 (BBv2). It is not meant as a replacement for the BBv2 user guide, but is intended to complement it.

I would recomend that you read this page first, to get an understanding of how vcproj concepts map over to BBv2, then refer to the BBv2 user manual for more information on the concepts mentioned here.

For large, complex projects migration can be rather hard, and a lot of issues will appear.

This chapter includes generic conversion issues and tricks as well as a detailed mapping from IDE settings to BBv2 settings. It describes how to map the following MSVC entities to Jam code:

This MSVC Migration Guide should be helpful both to beginners trying to see how well their MSVC tasks will be performed by Boost.Build, and to project managers trying to evaluate advantages and disadvantages of migrating to bb. Also it will help in creation of automated vcproj->jam conversion tools and Boost.Build plugin for MS IDE.

NOTE: These settings are taken from what VS.NET 2003 (v7.1) displays. They may be different on other versions of the IDE. [TODO: Note these differences where they are applicable.]


A configuration in BBv2 is called a variant. There are three predefined variants: release, debug and profile. Other variants can be added if you want, but unlike vcproj files, a variant isn't used to control different platform settings; these are done as part of the Jamfiles themselves if such control is required. By default, BBv2 takes care of a lot of the configuration settings that you would normally need to change.


BBv2 refers to the C++ compiler, linker and other tools provided by a vendor such as Borland as a toolset. A toolset does not need to be C++ specific (there are fortran toolsets available) and do not have to follow the compile/link model (e.g. flex/bison). In BBv2, the Microsoft VC++ toolset is called msvc.

If you just specify the toolset name (e.g. gcc) then BBv2 will use the default settings for that toolset as configured in user-config.jam. It is likely that you may have more than one version of a toolset installed. BBv2 allows you to setup these different versions and uses the toolset-version syntax to denote a specific version of the toolset. For example:

   msvc-6.0 - build with Visual C++ 6.0
   msvc-7.1 - build with Visual C++.NET 2003 (7.1)
   msvc-8.0 - build with Visual C++.NET 2005 (8.0)

Solutions And Projects

In the Microsoft IDE, a solution is used to manage a collection of projects so that you can have a solution for your application (containing all the executables, libraries and other projects). The solution is responsible for managing project dependencies.

A project is a set of instructions for building some part of the overall solution/application. In most cases (but not always), a project will be a C++ executable or DLL. In BBv2 a project is called a target and is specified in a file called Jamfile. Unlike in the IDE, you can have multiple targets in a single Jamfile.

BBv2 will work out the build order, and thus target dependencies, by looking at the list of sources for each target. These targets could be library targets (either static or DLL) or generated files and from these BBv2 will know that it needs to build those libraries or generate those files before it can build the target that depends on them. For example:

  lib common : [ glob common/*.cpp ] : <link>static ;
  exe Client : Client.cpp common ;
  exe Server : Server.cpp common ;

will cause common to be built first, then Client and Server.

In a Jamfile, you can tell BBv2 to build Jamfiles in subdirectories of the current Jamfile. Thus, a Jamfile is acting like a solution file. For example, if you have project/Jamfile? and project/hello/Jamfile?, you can do the following:

      build-project hello ;

to tell BBv2 to include the targets in project/hello/Jamfile? when working out what to build.

You can add solution-wide settings by adding a project decleration at the top of the Jamfile. These settings will be inherited by the targets in the Jamfile and all Jamfiles in subdirectories of the directory that this Jamfile is located in. For example:

      project wtl_projects
         : requirements <include>wtl/include

The Project Settings

The Microsoft IDE allows you to change project settings through a set of option dialogs. These dialogs are grouped by functionality, such as preprocessor related options. The following guide shows how the options on these dialogs map to BBv2 settings.

This section (and the links) are intended to be a reference to allow you to quickly find the BBv2 options needed to provide the equivalent vcproj options.

Understanding This Guide

If you see something like this:


   <cxxflags>/myFlag <define>MY_DEF

that means that given:

   exe myproj : sources.cpp ;

you can either add:

   exe myproj : sources.cpp : <cxxflags>/myFlag <define>MY_DEF ;


   exe myproj : sources.cpp : <cxxflags>/altFlags ;

to enable that vcproj option/value in BBv2. There is also a compact form that has the following layout:

   value1 - BBv2-options1
   valueN - BBv2-optionsN

where you add:

   exe myproj : BBv2-optionsN ;

to use valueN of the vcproj option in BBv2.

Also contained in this guide is how you can extend BBv2 to support VS IDE style settings such as minimum use of ATL. These code fagments can be added to user-config.jam if you want to make them available for your use only; build/v2/tools/builtin.jam if you want to provide them for global use across different toolsets; or build/v2/tools/msvc.jam if you want to restrict them to just the Microsoft compiler.

Configuration Properties

These settings manage settings that are independant of the tool (compiler, linker, etc.) being used. These are grouped into the following dialogs:


These settings control how the C/C++ compiler works and are split into the following dialogs:


These settings control how the linker works and are split into the following dialogs:

Resource Compiler


MIDL Compiler


Boost.Build V2/MIDL HOWTO

[buy lipitor online] [buy lipitor] [[buy lipitor online]]

[buy fioricet online] [buy fioricet] [[buy fioricet online]]

BOOST WIKI | Boost.Build V2 | RecentChanges | Preferences | Page List | Links List
Edit text of this page | View other revisions
Last edited August 24, 2008 1:40 pm (diff)
Disclaimer: This site not officially maintained by Boost Developers