【问题标题】:Bazel test with Boost.UTF使用 Boost.UTF 进行 Bazel 测试
【发布时间】:2017-06-13 22:43:56
【问题描述】:

出于多种原因,我更喜欢 Boost.UTF 而非 gtest(或其他替代方案)。 我最近决定使用 Bazel 作为我的构建系统,因为我基本上处于教程级别,所以我在网上寻找一种在 Bazel 中使用 Boost 的方法,但似乎没有一个可以处理 Boost.UTF,因为这个库是不仅仅是标题(就像在https://github.com/nelhage/rules_boost 中处理的那些),我不知道如何继续。

如何将 Boost.UTF 添加到 Bazel,以便将其用于我的测试模块?

欢迎任何提示,谢谢。

附: 解决我看到的问题的唯一方法是尝试在我构建的机器上安装 boost 并尝试让 Bazel 使用它。我想这就是它处理标准库的方式。

编辑: 这是我的单元测试代码。

btest.cpp

#define BOOST_TEST_MODULE CompactStateTest
#include <boost/test/included/unit_test.hpp>

BOOST_AUTO_TEST_SUITE(Suite1)
    BOOST_AUTO_TEST_CASE(Test1)
    {
        int x(0);
        BOOST_CHECK_EQUAL(x, 0);
    }
BOOST_AUTO_TEST_SUITE_END()

BUILD(bazel 的“Makefile”)

cc_test(
    name = "btest",
    srcs = ["btest.cpp",],
    deps = ["@boost//:test",],
)

【问题讨论】:

  • 这有点不清楚,但似乎太宽泛了。你到底遇到了什么问题?
  • 我重新编写了我的问题以使其更清晰。简而言之,我想将 Boost.UTF 添加到 Bazel,但我不知道互联网搜索是如何失败的,因为唯一的示例是仅包含标头的 Boost 库,而 UTF 不是。
  • 有一种方法可以仅将 Boost.Test 用作标头:请参阅 here。您需要将包含标头根的 boost 路径添加到 Bazel,应该就是这样。
  • 谢谢@Raffi。作为概念证明,我尝试编译的测试实际上是使用你提到的方法,我得到了双重主要错误。但是现在我想多了,可能是我的错在bazel模块中包含boost.UTF库中的所有文件:可能不是宏配置,而是从模块中排除一些文件。跨度>
  • 我不确定是否理解 :) boost.test“模块”必然有一个main,因为测试模块是一个完全可执行的程序。该程序可以链接到 boost.test 的静态或共享库(独立编译),或者使用头文件变体,但在所有情况下 boost.test 都会为您定义一个main。如果您的静态或共享库中已经有一个要测试的主库,那么这将无法正常工作。好的方法是拥有一个静态/共享库,其中包含您想要测试的所有实现,而无需 main

标签: c++ bazel boost-test


【解决方案1】:

从 bazel(和cc_test)的角度来看,测试是一个二进制文件,它在失败时返回非零退出代码,可能(不是强制性的)写入一个由 XML_OUTPUT_FILE env var 指定的 xml 文件设置在用 xml 测试结果测试执行时间。

所以你的目标是编写带有所有deps 集的cc_test 规则,以便bazel 可以编译和运行它。为此,您需要为 Boost.UTF 添加对 cc_library 的依赖项。这将是一个标准的 bazel cc_libraryhdrssrcs(和/或 deps)。

我期待您的下一个问题是关于如何依赖安装在本地系统上的文件,因为您会发现 local_repository(它是 new_ 变体)很有用。

【讨论】:

  • 感谢您的尝试,结果证明它不起作用,因为我认为 boost.UTF 需要设置一些宏开关,因为 boost.UTF 包的编译由于双主而失败。
  • 我在我的 PS 中暗示 local_repository,但如果我意识到如果我使用的是系统版本,那么我不需要 BUILD 文件来提升,因为头文件已经在编译器的包含路径中(在 CROSSTOOL 中设置),我只需要在使用它的模块中为 Boost.UTF 指定必要的链接选项。
  • 如果需要和预处理器对话,可以设置defines
猜你喜欢
  • 2020-08-10
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多