【发布时间】: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