
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@sig.com Software Engineer http://www.sig.com Susquehanna International Group, LLP using std::disclaimer;