Bjam用于gcov覆盖分析?

aSt*_*eve 6 c++ boost code-coverage bjam gcov

我希望为一个主要用C++编写的项目集成一个非平凡的跨平台构建系统.到目前为止,我已经评估了Cmake和Scons,虽然它们都代表了对(GNU)make的改进,但在我尝试使用这些工具的上下文中,这两种方法似乎都不优雅或透明.这让我进入了Boost Build(Bjam)并且我很受鼓舞,因为我的项目依赖于Boost,bjam应该可用于任何可行的目标平台.

我试图将代码覆盖整齐地集成到库的单元测试中,以便最终集成到构建服务器(如Jenkins)中,我遇到了困难.虽然我愿意接受Bjam最佳/标准练习的指导,但我认为我需要三种不同的"变体":

  • release - 仅构建优化的静态库
  • debug - 构建非优化的静态库和单元测试
  • coverage - 构建启用coverage的库并与启用非coverage的单元测试相关联.

本质上,除了标准的调试和发布版本之外,我还想要一个专门用于收集覆盖数据的调试版本.

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

我不清楚如何最好地用Bjam实现这一点 - 但是,我怀疑,它应该是一个相当常见的用例.Bjam是否明确支持gcov覆盖率分析(可能使用lcov呈现结果)?如果没有,任何人都可以推荐一种支持上述(简化)方案的策略吗?

Gar*_*ren 1

我非常有信心,您的第一个问题(bjam 是否明确支持 gcov)的答案是肯定的因为与调试和发布构建配置一样,bjam 会认为这是用户定义的功能变体

对于 bjam,看起来有几种方法可以实现您想要的功能:

  1. 定义您自己的功能变体,然后更新任何自定义标志的 CONFIG_COMMAND。

  2. 定义/重新定义工具集

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

http://cmake.org/Wiki/ITK/Policy_and_Procedure_for_Adding_Dashboards#Configuring_GCOV_Coverage