|
Boost : |
From: Rob Stewart (stewart_at_[hidden])
Date: 2005-08-21 00:23:13
Like some others writing recently, I found that
http://www.boost.org/more/getting_started.html doesn't paint the
whole picture.
In step five, the table describing the actions was a bit
confusing. Some options were described with "<something>" values
and others with "SOMETHING" values. I thought the latter were
e-var references at first.
Also in that table, there is mention of cygwin as a special
case. Elsewhere, only *nix and windows are mentioned. Is cygwin
considered *nix or windows in those other contexts?
Another confusing aspect is where one should "install" boost.
Upon downloading the tarball, where should one expand it? Once
done, where should one tell bjam to install the files and how
does that relate to where the tarball was expanded?
There is no mention of the possible to simply install the
header-only libraries. Perhaps that's not a supported option,
but it should be. At the very least, there should be a way to
install just the headers, without building any libraries, even if
that includes headers for libraries that require a library.
Then, folks can "install" Boost quickly, start using the
header-only libraries and then, if desirable, go back and build
the needed libraries. This would avoid the need to specify a
toolset I think, so invoking bjam would be much simpler.
Now for the real problem: When I ran bjam -sTools=gcc
--prefix=d:/dev/boost install, I was surprised to find that bjam
wouldn't create that directory. I created the directory and
reran the command. Much to my chagrin, it then couldn't create
d:/dev/boost/lib. I created that directory and reran the
command. Finally, I thought, it needed but couldn't create
"bin." Not "d:/dev/boost/bin" or some other fully qualified
directory, but "bin." I tried creating d:/dev/boost/bin, but
that didn't help. I didn't try creating $PWD/bin because I
didn't really want files there. Since
http://www.boost.org/more/getting_started.html doesn't mention a
bin directory, I didn't know where else to create it.
So, I could't seem to get bjam to build anything and it wasn't
helping me to understand what was wrong. The error message was
simple:
MkDir1 bin
spawn: No such file or directory
This was in cygwin, so perhaps there's some confusion as to what
should be on my path. At present, it's pretty simple:
~/bin:/bin:/usr/bin. Does bjam need more than that? If so,
what? I don't know what MkDir1 is, so I was at somewhat of a
loss.
On a lark, I decided to set --builddir and rerun the command. I
set it to d:/tmp/build and tried again. Lo and behold! It
almost worked. The error then read:
MkDir1 d:\tmp\build\bin
spawn: No such file or directory
That immediately made me wonder three things:
1. Why couldn't bjam create the bin subdirectory?
2. Why did bjam need to create a bin subdirectory instead of
just using the directory I specified using --builddir?
3. Why didn't the error message indicate that "bin" was the
--builddir value so I could know which parameter to
manipulate?
Well, the dance wasn't over yet. The next directory bjam wanted,
but couldn't create was d:/tmp/build/bin/boost! Yes, I created
that directory and tried again. Next I had to create
d:/tmp/build/bin/boost/libs. Then it was
d:/tmp/build/bin/boost/libs/date_time. I created that directory,
too. Finally, I got this message:
MkDir1 d:\tmp\build\bin\boost\libs\date_time\boost_date_time.dll
spawn: No such file or directory
At that point, I gave up. (No doubt I should have given up
sooner!)
Adding insult to injury were the interminable waits while bjam
figured out over and over what needed to be done.
Clearly, this isn't how things are supposed to work. Any ideas?
-- Rob Stewart stewart_at_[hidden] Software Engineer http://www.sig.com Susquehanna International Group, LLP using std::disclaimer;
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk