我如何强制bjam在boost中以干净和一致的方式构建?

我如何强制bjam在boost中以干净和一致的方式构建?,boost,compiler-construction,compilation,bjam,Boost,Compiler Construction,Compilation,Bjam,有没有办法让bjam干净、一致地建造?当它决定重建我的库时,当它决定从某个地方简单地复制它们时,它似乎是相当随机的 我尝试了bjam--clean all和bjam--clean,但它似乎仍然找到了它需要的文件,而不是重新编译它只是将它们复制到我的stage/lib文件夹中。要无条件重建,将-a标志传递给bjam,您可以使用bjam--clean。b2的完整调用说明作为参考: bjam--clean进行清理 进入bin.v2文件夹,必要时删除项目缓存文件 bjam-a和bjam--clean(仅

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


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

要无条件重建,将
-a
标志传递给
bjam
,您可以使用
bjam--clean
。b2的完整调用说明作为参考:

  • bjam--clean
    进行清理
  • 进入bin.v2文件夹,必要时删除项目缓存文件

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

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

    示例(自boost 1.61及以前的许多版本起): 当我使用
    地址模型=32构建时,然后使用64再次运行它,它告诉我:

    32位:是(缓存)

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

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

    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...
    
    rm-f'bin.v2/project cache.jam'
    ./bjam-a$options[…]

    消息

    32-bit: yes
    
    这是误导

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

    这并不意味着生成的代码不是针对64位目标的(如果您将
    地址模型=64

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

    注意:要在更改安装的编译器功能(通常是从更新中)后获得完全干净的版本,还必须在
    C:\Users\the_User\AppData\Local\Temp
    (当计划更改许多系统文件的位置时,VS2015更新3和很可能更新5,从而更改由
    vcvvarsall.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...
    
    生成这些文件的干净副本的证据如下所示:

    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
    

    这与clean不同。在clean之后,我可以构建项目的一半,修复编译错误,然后构建另一半。使用
    -a
    我必须构建前一半两次。我仍然存在这个问题(2015)。b2--clean,b2--clean all,bjam--clean等等。它们都不起作用。现在链接已断开