我如何强制bjam在boost中以干净和一致的方式构建?
有没有办法让bjam干净、一致地建造?当它决定重建我的库时,当它决定从某个地方简单地复制它们时,它似乎是相当随机的我如何强制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--clean all
和bjam--clean
,但它似乎仍然找到了它需要的文件,而不是重新编译它只是将它们复制到我的stage/lib
文件夹中。要无条件重建,将-a
标志传递给bjam
,您可以使用bjam--clean
。b2的完整调用说明作为参考:
bjam--clean
进行清理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等等。它们都不起作用。现在链接已断开