|
Boost-Build : |
Subject: [Boost-build] boost build - user module configuration
From: Stefan Pflueger (spfluege_at_[hidden])
Date: 2015-01-22 08:13:26
Hello,
I'm currently working on a c++ project that uses bjam (boost build) as a
builder. For now I was quite happy with this build system and everything
works nicely, however with one exception which I could not find an easy
solution for:
I would like to have a build configuration of this project, in which the
user is able to switch on or off certain modules and its dependencies
(also automatic checks if software is not found -> disable module..).
With dependencies I mean for example applications that require this
module to work. So these applications should also not be built when the
module is disabled.
Since I found nothing out there that could do this job for me, I created
some variables in the jamroot (top level jamfile) that resemble the
module structure of the project, and I use these variables in if
statements within the appropriate jamfiles to switch on and off things.
See below for an example:
Jamroot excerpt:
|constant build_DataReader: 1 ;
constant build_RootReader: 1 ;
constant build_AsciiReader: 1 ;
if $(build_DataReader) {
build-projectDataReader ;
}|
Jamfile for DataReader Module:
|sources= [ glob*.cpp] ;
if $(build_RootReader)
{
build-projectRootReader ;
sources= $(sources) $(DATAREADER)/RootReader//RootReader ;
}
if $(build_AsciiReader)
{
build-projectAsciiReader ;
sources= $(sources) $(DATAREADER)/AsciiReader//AsciiReader ;
}
# Build libDataReader.so
libDataReader :
$(sources)
;
install dist: DataReader : <location>$(TOP)/lib;|
However this is not a very elegant solution, as I would constantly have
to update these hardcoded if statements when dependencies change etc..
In addition it is annoying to have to construct this tree structure of
the modules in the project myself, as boost build is constructing the
same thing internally by itself. Is there some kind of option in boost
build to make the building of applications optional in case some
requirements are not built in the current build process?
The only solution I see at the moment would be to construct a complete
new config tool that would create the jamfiles for me like I want them
(preprocessor). However this is work I do not want to start, and I don't
really believe that there is nothing out there that is able to do what
seems to me like pretty common stuff. But probably I missed something
completely...
Hope I explained it in an understandable way, thanks in advance!
Steve
Boost-Build list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk