【问题标题】:How do I force bjam in boost to build cleanly and consistently?如何强制 bjam in boost 干净、一致地构建?
【发布时间】:2011-08-08 05:20:43
【问题描述】:

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

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

【问题讨论】:

  • 我仍然有这个问题(2015 年)。 b2 --clean、b2 --clean-all、bjam --clean 等,它们都不起作用。

标签: boost compiler-construction compilation bjam


【解决方案1】:

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

【讨论】:

  • 这和干净不一样。清理后我可以构建项目的一半,修复编译错误,然后构建另一半。使用-a,我必须将前半部分构建两次。
【解决方案2】:

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

【讨论】:

  • 链接现在失效了
【解决方案3】:

消息

32-bit: yes

具有误导性。

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

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

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

请注意:要在更改安装的编译器功能后(通常从更新中)获得完全干净的构建,您还必须删除 C:\Users\The_User\AppData\Local\Temp 处的几个缓存版本 vcvarsall.bat(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

【讨论】:

    【解决方案4】:

    作为参考:

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

    【讨论】:

      【解决方案5】:

      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 [...]

      【讨论】:

        猜你喜欢
        • 2016-06-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-10
        • 1970-01-01
        • 2018-11-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多