首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于gcov覆盖分析的Bjam?

用于gcov覆盖分析的Bjam?
EN

Stack Overflow用户
提问于 2012-05-18 19:32:49
回答 2查看 845关注 0票数 6

我希望为一个主要用C++编写的项目集成一个非平凡的跨平台构建系统。到目前为止,我已经对Cmake和Scon进行了评估,虽然它们都代表了对GNU的改进,但在我试图使用这些工具的上下文中,这两种方法都不是优雅的,也不是透明的。这给我带来了Boost Build ( bjam ),我感到鼓舞的是,鉴于我的项目依赖于Boost,bjam应该已经可以用于任何可行的目标平台了。

我在试图将代码覆盖集成到库的单元测试时遇到了困难……以便最终集成到像Jenkins这样的构建服务器中。虽然我愿意接受Bjam最佳/标准实践的指导,但我认为我需要三个不同的“变体”:

  • 版本-只构建优化的静态库
  • 调试-构建非优化的静态库和单元测试
  • 覆盖率-以构建支持覆盖的库和与非覆盖启用单元测试的链接。

本质上,除了标准的调试和发布构建之外,我还想要一个特殊用途的调试构建,它还可以收集覆盖数据。

我需要(至少)用g++和msvc构建.并且只与g++一起使用gcov开关。这意味着我的库目标需要与单元测试可执行目标不同的“编译器标志”.只为我的一个编译器套件..。只有一个变体。

我不清楚如何最好地用Bjam来实现这一点--不过,我怀疑这应该是一个相当常见的用例。Bjam是否对gcov覆盖分析有明确的支持(可能使用lcov提供结果)?如果没有,是否有人能推荐一种支持上述(简化)情景的策略?

EN

回答 2

Stack Overflow用户

发布于 2012-05-27 00:59:22

我非常确信,您的第一个问题的答案-- bjam是否明确支持gcov--是一个明确的no,因为与调试和发布构建配置一样,bjam会认为这是用户需要定义的特征变体

对于bjam来说,似乎有几种方法可以做你想做的事情:

  1. 定义您自己的特性变体,然后更新任何自定义标志的CONFIG_COMMAND。
  2. 定义/重新定义工具集

对于CMake,请考虑遵循ITK所做的模式:

覆盖范围

票数 1
EN

Stack Overflow用户

发布于 2015-01-06 15:12:45

我也有同样的需求,我基本上在Jamroot文件中添加了下面的行来定义我自己的覆盖率变体。

代码语言:javascript
复制
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之外利用它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10658701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档