20

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

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

4

5 回答 5

16

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

于 2011-05-05T09:25:31.400 回答
7

You can use bjam --clean. Full invocation instructions for b2 are here.

于 2014-05-01T18:13:16.580 回答
6

讯息

32-bit: yes

具有误导性。

这仅意味着默认编译器(通常是 msvc)有 32 位版本可用

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

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

并且要注意:要在更改安装的编译器功能后获得完全干净的构建,通常是从更新中,您还必须删除vcvarsall.batat的几个缓存版本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
于 2016-11-14T12:23:58.467 回答
5

作为参考:

  1. bjam --clean清洁。
  2. 如有必要,进入 bin.v2 文件夹并删除项目缓存文件
于 2014-10-03T18:58:12.873 回答
5

bjam -a并且bjam --clean(仅)似乎清理了中间文件和生成的二进制文件,而不是构建配置 - 根据手册,这是无意的:

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

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

32 位:是(缓存)

换句话说,与我传递的选项相比,bjam 更喜欢缓存值。总是。-a并且--clean不要改变这种非正统的(越野车?)行为。

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

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

于 2016-06-20T17:00:14.100 回答