|
Boost-Build : |
From: Roland Schwarz (roland.schwarz_at_[hidden])
Date: 2007-02-14 14:12:26
Since I had a rather long way to figure out if/how it is possible to have cygwin
and mingw compilers in a side by side installation, I thought it would be a nice
idea to share this information.
This post also is related to my post: "cygwin builds are running with wrong
tagging".
1) What do I mean by mingw and cygwin?
By mingw I refer to the toolset, compiler and library available from:
http://mingw.sourceforge.net/
I downloaded the 3.4.5 and 3.4.2 versions and installed (copied) them
each into their own directories.
By cygwin I refer to the cygwin environmet, for which an installer is
available e.g. from here : http://cygwin.com/
2) Compiling from the command line.
Command line in context of this post means: Invoking builds from the
Windows command interpreter CMD.EXE.
Compiling from the bash inside the cygwin environment is not covered
here.
3) The easy way: Using a single toolset at a time.
As the title say it: Make sure your compiler's bin dir comes first in your
PATH environment variable.
E.g.: for mingw 3.4.2
PATH=C:\Programme\mingw-3.4.2\bin;C:\WINNT\system32;
C:\WINNT;C:\Programme\Tools
or cygwin :
PATH=C:\WINNT\system32;C:\WINNT;C:\Programme\Tools;C:\Cygwin\bin
(The Tools directory is, where my bjam.exe lives.)
Depending on your PATH variable the command (e.g. from boost-root)
bjam toolset=gcc --with-thread stage
will compile the threading library for the respective toolset and put
the results into the stage directory.
4) Using a mixture of gcc toolsets.
When you need to specify more than one toolset on the command line, or
you cannot change the PATH for each build, the previous approach will
not work. The Boost.Build has no way to find out which compiler you are
refering to by looking into the PATH variable only.
You need to set up a user-config.jam file. Unfortunately this is not
straight forward for the gcc and only documented stintedly.
I provide you with an example user-confg.jam to save you the guess work.
I do not maintain, that it is the only possible setup, or even the most
elegant one. (I would be glad if someone more knowledgeable than me teach
me a better one.)
using gcc
: 3.4.4
: "C:/Cygwin/bin/g++.exe"
: <flavor>cygwin
<root>"C:/Cygwin/"
;
using gcc
: 3.4.2
: "C:/Programme/mingw-3.4.2/bin/g++.exe"
: <flavor>mingw
<root>"C:/Programme/mingw-3.4.2/"
;
using gcc
: 3.4.5
: "C:/Programme/mingw-3.4.5/bin/g++.exe"
: <flavor>mingw
<root>"C:/Programme/mingw-3.4.5/"
;
Of course you will need to adjust the shown paths to reflect your
environment.
Please also take care that the path to your cygwin bin directory is in
your PATH variable! This is _not_ so that Boost.Build will find the
compiler, but so as to allow the cygwin1.dll and other libs to be found
in turn. No need for mingw or cygwin compilers in PATH.
The bjam invocation is a little tricky, and I show two variants I found
working. Again from boost-root as an example:
*) bjam gcc-3.4.2-mingw --with-thread stage
or
bjam gcc-3.4.4-cygwin --with-thread stage
or even
bjam gcc-3.4.2-mingw gcc-3.4.4-cygwin --with-thread stage
but _not_
bjam toolset=gcc-3.4.2-ming,gcc-3.4.4-cygwin --with-thread stage
The last one while looking inncocent to me fails badly.
*) bjam toolset=gcc-3.4.2/toolset-gcc:flavor=mingw
toolset=gcc-3.4.4/toolset-gcc:flavor=cygwin --with-thread stage
This one is more verbose or "systematic". The grouping by means of the
',' still not applicable.
Roland
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