如何强制bjam在boost中干净利落地构建?

时间:2011-04-18 21:24:35

标签: boost compiler-construction compilation bjam

有没有办法让bjam干净整洁地构建?当它决定重建我的库并且当它决定简单地从某个地方复制它们时,似乎相当随机。

我已经尝试了bjam --clean-all和bjam --clean,但它似乎仍然找到它需要的文件而不是重新编译它只是将它们复制到我的stage / lib文件夹。

5 个答案:

答案 0 :(得分:13)

要无条件重建,请将-a标记传递给bjam

答案 1 :(得分:7)

您可以使用bjam --clean。 b2的完整调用说明为here

答案 2 :(得分:5)

消息

32-bit: yes

具有误导性。

这仅表示默认编译器(通常为msvc)具有32位版本可用

这并不意味着生成的代码不适用于64位目标(如果您放置address-model=64)。

--reconfigure清除缓存并确保获得未缓存的值(如果将msvc作为默认编译器,则仍为32位)。

请注意:在更改安装的编译器功能后,通常从更新中获得完全干净的构建,您还必须在vcvarsall.bat删除C:\Users\The_User\AppData\Local\Temp的几个缓存版本(VS2015更新3和非常当许多系统文件的位置被定义为更改时,可能会更新5,因此由vcvarsall.bat定义的宏。

这些是这样的名字:

b2_msvc_14.0_vcvarsall_amd64.cmd
...

生成这些文件的干净副本的证明如下:

I:\modular-boost\libs\hello_boost\example>b2 -a toolset=msvc-14.0
CRT_IncludePath_x64 =  C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt using msvc
...found 1 target...
...updating 1 target...
msvc.write-setup-script C:\Users\paula\AppData\Local\Temp\b2_msvc_14.0_vcvarsall_x86.cmd
...updated 1 target...
...found 1 target...
...updating 1 target...
msvc.write-setup-script C:\Users\paula\AppData\Local\Temp\b2_msvc_14.0_vcvarsall_amd64.cmd
...updated 1 target...
...found 1 target...
...updating 1 target...
msvc.write-setup-script C:\Users\paula\AppData\Local\Temp\b2_msvc_14.0_vcvarsall_x86_arm.cmd
...updated 1 target...

如果您没有干净的副本,将使用vsvarsall.bat的“缓存”版本,可能会产生关于存在的文件的残酷混淆消息,如:

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE\crtdefs.h(10): fatal error C1083: Cannot open include file: 'corecrt.h': No such file or directory

答案 3 :(得分:4)

作为参考:

  1. bjam --clean要清理。
  2. 进入bin.v2文件夹并在必要时删除项目缓存文件

答案 4 :(得分:3)

bjam -abjam --clean(仅)似乎清理了中间文件和结果二进制文件,但没有清除构建配置 - 根据the manual这是无意的:

  

缓存配置结果 - 如果尝试使用不同的编译器选项进行重建,则在bjam命令行中添加“-a”以强制重建所有目标。

示例(从boost 1.61和之前的许多版本开始): 当我使用address-model=32构建时,然后使用64再次运行它,它告诉我:

  

32位:是(缓存)

换句话说,bjam更喜欢我传递的选项的缓存值。总是。 -a--clean不会改变这种非正统(错误?)的行为。

因此,每当您更改传递给bjam的参数时,最好在构建之前删除缓存文件(如Rik所提到的)。 因此,我的构建脚本看起来有点像这样:

rm -f 'bin.v2/project-cache.jam' ./bjam -a $options [...]