For many C++ applications I very much want to use the Boost libraries, just not the whole set.
This post explains how to use the bcp tool to create a subset of the Boost libraries in order to leave out unnecessary libraries and tailor it to the needs of your project. One nice thing about bcp is that it can be run at any time so as to update your Boost dependencies as and when the need arises.
This post assumes that you have already installed the Boost libraries and used bootstrap.bat and ./b2 in order to build the libraries that need additional compilation. See this previous post for more in-depth details.
Run bootstrap.bat in order to create bjam.exe if you have not already done so. This bootstrap.bat batch file is found in the boost root directory:
Open the command prompt and navigate to the bcp directory
In my setup it is located in the tools/bcp directory:
From your bcp directory, run bjam.exe from here:
This creates the bcp executable in [Boost path]\bin.v2\tools\bcp\msvc-10.0\release\link-static directory:
Using the bcp executable created you can now create sub-sets of the Boost libraries as and when.
Example command line:
bcp scoped_ptr --boost="C:\Program Files\boost_1_55_0\boost_1_55_0" C:\temp
Create the folder where you would like the Boost subset to resite. This might be a folder for a Visual Studio project you are working on:
And then run the bcp command, making sure to include the libraries you wish to include, as well as the location of the boost root directory and the destination folder:
Full command I used here is:
bcp.exe regex --boost="C:\Program Files\boost_1_55_0\boost_1_55_0" C:\Projects\RegexProject\BoostLite
As shown:
On inspecting the BoostLite folder contents observe that all necessary Boost components for regex have been included:
Then to try this out, create a Visual Studio Project in the same RegexProject folder created:
In the empty project, insert a new cpp file, main.cpp, and paste in some example code that uses the Boost regex library:
#include <boost/regex.hpp>
#include <iostream>
#include <string>
int main()
{
std::string line;
boost::regex pat( "^Subject: (Re: |Aw: )*(.*)" );
while (std::cin)
{
std::getline(std::cin, line);
boost::smatch matches;
if (boost::regex_match(line, matches, pat))
std::cout << matches[2] << std::endl;
}
}
Then set the necessary environment settings in order to make this properly compile.
Right-click your project folder and select Properties. In the C/C++ > General tab set the Additional Include Directories field:
And then set the Additional Library Directories property:
For this we need the regex library files, so I copy from the stage/lib directory of my regular boost installation:
And create the same stage/lib directory structure, but this time inside my BoostLite location, but only containing the regex library files I really need:
I then set the Additional Library Directories in the project properties:
The program then compiles and uses the regex library as expected.
Download sample project using Boost sub-set
Download example project that includes the Boost regex subset as a complete package, at slightly over 10 MB.