我希望为一个主要用C++编写的项目集成一个非平凡的跨平台构建系统。到目前为止,我已经对Cmake和Scon进行了评估,虽然它们都代表了对GNU的改进,但在我试图使用这些工具的上下文中,这两种方法都不是优雅的,也不是透明的。这给我带来了Boost Build ( bjam ),我感到鼓舞的是,鉴于我的项目依赖于Boost,bjam应该已经可以用于任何可行的目标平台了。
我在试图将代码覆盖集成到库的单元测试时遇到了困难……以便最终集成到像Jenkins这样的构建服务器中。虽然我愿意接受Bjam最佳/标准实践的指导,但我认为我需要三个不同的“变体”:
本质上,除了标准的调试和发布构建之外,我还想要一个特殊用途的调试构建,它还可以收集覆盖数据。
我需要(至少)用g++和msvc构建.并且只与g++一起使用gcov开关。这意味着我的库目标需要与单元测试可执行目标不同的“编译器标志”.只为我的一个编译器套件..。只有一个变体。
我不清楚如何最好地用Bjam来实现这一点--不过,我怀疑这应该是一个相当常见的用例。Bjam是否对gcov覆盖分析有明确的支持(可能使用lcov提供结果)?如果没有,是否有人能推荐一种支持上述(简化)情景的策略?
发布于 2012-05-27 00:59:22
我非常确信,您的第一个问题的答案-- bjam是否明确支持gcov--是一个明确的no,因为与调试和发布构建配置一样,bjam会认为这是用户需要定义的特征变体。
对于bjam来说,似乎有几种方法可以做你想做的事情:
对于CMake,请考虑遵循ITK所做的模式:
覆盖范围
发布于 2015-01-06 15:12:45
我也有同样的需求,我基本上在Jamroot文件中添加了下面的行来定义我自己的覆盖率变体。
variant coverage : debug : <cxxflags>--profile-arcs <cxxflags>--test-coverage <cxxflags>--coverage <link>shared ;
lib gcov : : <name>gcov : ;
unit-test mytest : tests/mytest.cpp libboost_unit_test : <variant>coverage:<library>gcov ;覆盖数据是在测试运行时创建的,然后我使用gcov在bjam之外利用它。
https://stackoverflow.com/questions/10658701
复制相似问题