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

Chr*_*ian 16 compiler-construction boost compilation bjam

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

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

ust*_*sta 14

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


Rio*_*iot 7

你可以用bjam --clean.这里有关于b2的完整调用说明.


Dan*_*l S 6

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

配置结果会被缓存 - 如果您尝试使用不同的编译器选项进行重建,请在 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 [...]


Rik*_*Rik 5

作为参考:

  1. bjam --clean清洁。
  2. 进入 bin.v2 文件夹并根据需要删除项目缓存文件


Pau*_*tow 5

讯息

32-bit: yes
Run Code Online (Sandbox Code Playgroud)

有误导性。

它仅仅意味着默认的编译器(通常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
...
Run Code Online (Sandbox Code Playgroud)

生成这些文件的干净副本的证据如下所示:

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...
Run Code Online (Sandbox Code Playgroud)

如果您没有干净的副本,则将使用的“缓存”版本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
Run Code Online (Sandbox Code Playgroud)