Boost C++ 库

……世界上最受推崇和设计精良的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu,《C++ 编码规范

生成库状态表

目的

任何时候,如果考虑使用像 Boost 库这样庞大而复杂的库,都必须有一种方法来验证库函数在其环境中的运行情况。这应该在安装库时以及任何时候对库的适用性和/或使用方法产生疑问时进行。

此处描述的步骤允许用户对库运行任意组合的测试,并生成一组方便的表格,显示在什么条件下运行哪些测试。

准备工作

生成这些表格需要几个实用程序:b2 用于运行测试本身,以及library_status 用于处理测试并构建表格。要构建b2,请参阅 Boost Build 的文档。要构建library_status,请移动到目录 regression-root/build 并调用b2。如果一切顺利,则可以在 regression-root/stage/bin/library_status 找到library_status 可执行文件。

运行单个库的测试

  1. 从您的命令行环境开始。
  2. 将当前目录设置为:boost-rootlibs/<库名称>/test
  3. 调用library_status
  4. 这将显示一条简短的帮助消息,描述如何为要在最终表格中显示的编译器和变体设置命令行参数。
  5. 设置这些参数需要了解 bjam 的基本用法。希望如果您访问了此页面,您在安装和库构建过程中已经获得了所需的知识。
  6. 使用相应设置的参数重新运行上述命令。
  7. 命令终止时,当前目录中应该有一个名为“library_status.html”的文件。
  8. 使用任何 Web 浏览器显示此文件。

对于 regex 库,应该会出现类似于以下的表格。

测试名称 msvc-7.1
调试 发布
静态链接 多线程 静态链接 多线程
多线程 多线程
bad_expression_test 缺失 警告 缺失 警告
captures 缺失 失败 缺失 失败
captures_test 缺失 警告 缺失 警告
concept_check 缺失 通过 缺失 通过
icu_concept_check 缺失 通过 缺失 通过
object_cache_test 缺失 警告 缺失 警告
posix_api_check 缺失 警告 缺失 警告
posix_api_check_cpp 缺失 通过 缺失 通过
recursion_test 缺失 警告 缺失 警告
regex_config_info 缺失 通过 缺失 通过
regex_dll_config_info 缺失 通过 缺失 通过
regex_regress 通过* 缺失 通过* 缺失
regex_regress_dll 缺失 通过* 缺失 通过*
regex_regress_threaded 缺失 通过 缺失 通过
static_mutex_test 缺失 通过 缺失 通过
test_collate_info 缺失 警告 缺失 警告
unicode_iterator_test 缺失 警告 缺失 警告
wide_posix_api_check_c 缺失 警告 缺失 警告
wide_posix_api_check_cpp 缺失 警告 缺失 警告

此表是通过调用以下命令行生成的

regression-root/stage/bin/library_status --b2 b2 --boost-root=../../.. toolset=msvc-7.1 variant=debug,release

在 boost-root/libs/regex/test 目录内。

此表显示了库的调试版和发布版的 regex 测试结果。它还显示其中一项测试是专门使用运行时库的静态链接/多线程版本运行的。标记为“缺失”的单元格对应于由于某种原因未运行的测试。这通常是因为相应的Jamfile.v2 排除了给定编译器和构建属性组合的此测试。在此示例中,所有测试都使用相同的编译器运行。如果使用了其他编译器,它们将作为更多列出现在表中。

上表只是一个示例,因此链接实际上并没有指向任何内容。在您生成的表中,链接将显示一个页面,描述任何错误、警告或有关测试的其他可用信息。如果测试通过,通常没有其他信息,因此也没有链接。

这些表是累积的。也就是说,如果您现在运行一组测试,稍后运行具有不同属性的测试,则该表将包含迄今为止的所有结果。测试结果存储在../bin.v2/libs/test/<library>/...中。要将测试结果重新初始化为空,请删除此目录中的相应文件。

上述过程假设表是在../libs/<library>/test目录内生成的。这是最常见的情况,因为此目录包含Jamfile.v2以及官方 Boost 测试人员使用的源代码。但是,这只是一个约定。可以为库中的其他目录生成表。一种可能性是为../libs/<library>/example中的所有示例生成表。或者,可能有一个特殊的性能测试目录,这些测试需要很长时间才能运行,因此不适合由官方 Boost 测试人员运行。请记住,库状态表是在调用library_test命令的目录中生成的。


版权所有 2011 Bryce Lelbach。

版权所有 2007-2011 Robert Ramey。

版权所有 2015 Rene Rivera。

根据 Boost 软件许可证 1.0 版分发。(参见随附文件 LICENSE_1_0.txt 或 https://boost.ac.cn/LICENSE_1_0.txt)