有没有办法让 bjam 干净、一致地构建?当它决定重建我的库并决定从某个地方简单地复制它们时,这似乎是相当随机的。
我试过bjam --clean-all
and bjam --clean
,但它似乎仍然找到了它需要的文件,而不是重新编译它只是将它们复制到我的stage/lib
文件夹中。
有没有办法让 bjam 干净、一致地构建?当它决定重建我的库并决定从某个地方简单地复制它们时,这似乎是相当随机的。
我试过bjam --clean-all
and bjam --clean
,但它似乎仍然找到了它需要的文件,而不是重新编译它只是将它们复制到我的stage/lib
文件夹中。
要无条件重建,请将-a
标志传递给bjam
.
You can use bjam --clean
. Full invocation instructions for b2 are here.
讯息
32-bit: yes
具有误导性。
这仅意味着默认编译器(通常是 msvc)有 32 位版本可用。
这并不意味着生成的代码不适用于 64 位目标(如果你放address-model=64
)。
--reconfigure
清除缓存并确保您获得未缓存的值(如果您将 msvc 作为默认编译器,它将仍然是 32 位)。
并且要注意:要在更改安装的编译器功能后获得完全干净的构建,通常是从更新中,您还必须删除vcvarsall.bat
at的几个缓存版本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
作为参考:
bjam --clean
清洁。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 [...]