bjam编译boost失败及原因

(转载请注明来源于金庆的专栏)

用bjam在各种环境下编译Boost , 没有十次也有八次了,
但是前两天在一台XP上编译时,竟然失败。

查看输出,竟然是在创建目录时失败。信息如下:

MkDir1 stage
    mkdir "stage"
...failed MkDir1 stage...
...skipped stage/lib for lack of stage...

因为是用mingw的gcc编译,开始时以为是mingw的环境有问题,
实际结果是找错了方向。
mingw已经有过成功先例,而且新装一台机器后编译也成功了。
Google类似错误也没有什么线索。

变通方法是用bjam -n打印出所有命令到一个批处理文件,
然后执行批处理来编译。

用该方法创建了所有的目录,使MkDir1规则通过了,
但是下一个错误是common.copy规则,看来所有的命令都会出错。

但是不甘心用这个方法,不能向错误屈服。
最后还是在bjam的源代码中找到了线索。

原来一条规则会建立一个命令,
然后在NT上会在用户的Temp目录下创建一个临时bat文件,
运行该bat文件执行命令。

使用bjam -d2或-d3,-d4可以打印出1到2、3、4级的调试信息,
在4级信息内可以看到创建并运行的临时批处理。

因为该机器在很早以前被我设置权限,禁止了在Temp运行程序的权力,
所以产生了这个错误。
(禁止Temp运行程序对病毒木马是否有点作用呢?
还是去掉限制好了,因为有些程序确实会用到。)

放开权限就好了。