|
Boost-Build : |
From: Chris Drexler (CKolumbus_at_[hidden])
Date: 2003-08-23 08:48:50
Dear Listmembers,
since a few weeks I'm using boost within a development system
which should be changed towards operating system independence.
As boost-buil V2 has a lot of nice features I wanted to base
the build process on it. Unfortunatly it's very confusing
to get all the information I need and sometimes it is not clear
to which boost-build version (v1 or v2) some documentation
belongs to. I hope this list is the right place to ask some
questions about this.
I'm going to describe the my current setup first (which is
a little bit longish in order to cover all important points,
hopefully) and afterwards I'll explain the problems.
The scenario: We have some self-made class libraries which
depend on downloaded packages (one is boost). So I thought
of using the (usage-)dependency features of boost-build v2
for automatically using the right include paths and the
according libraries. (I'm using milestone 6 of boost-build)
root
|
+ pkgs + boost_1_30_0
| |
| + log4cpp_0.3.4b + include
| + lib
|
+ mylib + include
| + src
|
+ myapps + testapp + src
The idea was to separate the information of which package versions to
use and where libraries and include files reside.
For this I put a Jamfile into 'pkgs' which consist of the following entries
(OS independence not included right now)
-------------------------------------------------------------------
project pkgs ;
BOOST = boost_1_30_0 ;
LOG4CPP = log4cpp-0.3.4b ;
# system libraries
lib winsock : : <name>Ws2_32.lib ;
lib advapi : : <name>Advapi32.lib ;
alias all : log4cpp boost ;
alias boost : : <include>$(BOOST) ;
lib log4cpp
:
: <file>$(LOG4CPP)/msvc6/log4cpp/Release/log4cpp.lib <variant>release
:
: <library>winsock <library>advapi
;
lib log4cpp
:
: <file>$(LOG4CPP)/msvc6/log4cpp/Debug/log4cpp.lib <variant>debug
:
: <library>winsock <library>advapi
;
-------------------------------------------------------------------
and the Jamfile in 'root' (where project-root.jam and boost-build.jam
resides) contains
-------------------------------------------------------------------
project MyProject
: default-build debug <link>static
;
use-project /pkgs : ./pkgs ;
use-project /MyLib: ./mylib ;
-------------------------------------------------------------------
The Jamfile in 'mylib' uses several of the libraries defined in
'pkgs'
-------------------------------------------------------------------
project MyLib
: usage-requirements <include>./include
: requirements <include>./include
: source-location ./src
;
LIBSRC =
[ .. whatever ..]
;
lib MyLib : $(LIBSRC) : : : <library>/pkgs//log4cpp ;
lib MyLib2 : $(LIBSRC) : : : <library>/pkgs//all ;
-------------------------------------------------------------------
and the application 'testapp' depends on 'mylib'
-------------------------------------------------------------------
project testapp
: requirements <library>/MyLib//MyLib
: source-location ./src
;
exe test
: testapp.cpp
;
exe test2
: testapp.cpp
:
: <library>/MyLib//MyLib2
;
-------------------------------------------------------------------
Problems/Questions
==================
- I already know from this list that "include-only" libraries are
not supported right now. The line
alias boost : : <include>$(BOOST) ;
hasn't been removed just to demonstrate the final idea.
- I had to put a (empty) 'project-root.jam' file into 'pkgs'.
Otherwise I get the error message:
error: default build can be specified only in first alternative
main target is ../../../pkgs/log4cpp
Any ideas why this happens?
I get the same error message if I put the prebuild declarations,
e.g. of log4cpp release/debug, into the main Jamfile in root.
- If I put the prebuild declarations, again c.f. log4cpp, into
the Jamfile in root (after having solved the problem described
in the last paragraph ), how can I access the entries as depencies
as the reference via the package name ('/pkgs//log4cpp')
is not possible any more as the something similar to the line
'use-project /pkgs : ./pkgs ;' is missing.
- the library dependcies for 'log4cpp' are correct and the
appropriate library is linked BUT the include depencies
are not used (neither for boost nor for log4cpp).
I had to add the paths once more into the Jamfile in 'root'
to make them available. After the changes the Jamfile looks
like this
-------------------------------------------------------------------
BOOST = pkgs/boost_1_30_0 ;
LOG4CPP = pkgs/log4cpp-0.3.4b ;
project MyProject
: default-build debug <link>static
: requirements
<include>$(BOOST)
<include>$(LOG4CPP)/include
;
use-project /pkgs : ./pkgs ;
use-project /MyLib: ./mylib ;
-------------------------------------------------------------------
This is not what I want because now the paths to the
package directories appear twice, once in root/Jamfile and once in
root/pkgs/Jamfile.
Thanks you very much !
Best Regards,
Chris Drexler
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