2017-06-13 108 views
0

由于许多原因,我更喜欢Boost.UTF gtest(或其他选择)。 我最近决定使用Bazel作为我的构建系统,由于我基本上处于教程级别,因此我在网上寻找了一种在Bazel中使用Boost的方法,但它们都没有处理Boost.UTF,因为此库不是只有标题(就像在https://github.com/nelhage/rules_boost中处理的那样),我不知道如何继续。Bazel测试与Boost.UTF

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

任何提示是值得欢迎的,谢谢。

P.S. 解决我所看到的问题的唯一方法是尝试在我创建的计算机上安装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(以下简称 “生成文件” 为巴泽勒)

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

这有点不清楚,但看起来太宽泛。你遇到的问题究竟是什么? –

+0

我重新排序我的问题,使其更清晰。总之,我想将Boost.UTF添加到Bazel,但我不知道如何和互联网搜索失败,因为唯一的例子是仅用于仅包含头文件的Boost库,而UTF不是。 – Dirich

+0

有一种方法可以将Boost.Test用作头文件:参见[这里](http://www.boost.org/doc/libs/1_64_0/libs/test/doc/html/boost_test/usage_variants.html#boost_test .usage_variants.single_header)。您需要将包含标题根的'boost'路径添加到Bazel,并且应该是这样。 – Raffi

回答

1

从巴泽勒(和cc_test的)的角度来看,一个测试是返回非二进制-zero退出代码,可能(不是强制性的)用xml测试结果在测试执行时刻写入由XML_OUTPUT_FILE env var指定的xml文件。

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

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

+0

感谢您的试用,结果证明它不起作用,因为我认为boost.UTF需要设置一些宏开关,因为boost.UTF包的编译失败了,因为双主。 – Dirich

+0

我暗示了我的PS中的local_repository,但是如果我意识到如果我使用系统版本,那么我不需要BUILD文件来提升,因为头文件已经在编译器的包含路径中(在CROSSTOOL中设置),而我只需要在使用它的模块中为Boost.UTF指定必要的linkopts。 – Dirich

+0

如果您需要与预处理器交谈,您可以设置[definitions](https://bazel.build/versions/master/docs/be/c-cpp.html#cc_library.defines)。 – mhlopko