我正在为一个主要用C++编写的项目集成一个不平凡的跨平台构建系统。到目前为止,我已经评估了Cmake和Scons,尽管它们都相对于(GNU)make有所改进,但两种方法似乎都不是优雅或透明的。
我试图使用这些工具。这使我进入了Boost Build(Bjam),我感到鼓舞的是,由于我的项目依赖于Boost,因此bjam应该适用于任何可行的目标平台
已经。

为了最终集成到Jenkins之类的构建服务器中,试图整齐地集成代码覆盖范围以进行库的单元测试时,我遇到了困难。虽然我愿意接受Bjam最佳/标准实践的指导,但我认为我需要三个不同的“变体”:

  • 版本-仅构建优化的静态库
  • 调试-构建未优化的静态库和单元测试
  • coverage-构建启用了coverage的库并与未启用coverage的单元测试链接。

  • 本质上,除了标准的调试和发布版本外,我还希望有一个专用的调试版本,它也可以收集coverage数据。

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

    我不清楚如何用Bjam最好地实现这一目标-尽管我怀疑这应该是一个相当普遍的用例。 Bjam是否对gcov覆盖率分析有明确的支持(可能会显示结果)
    使用lcov)?如果不是,那么谁能推荐一种可以支持上述(简化)方案的策略?

    最佳答案

    我非常有信心,第一个问题的答案(bjam是否明确支持gcov)是肯定的,因为像调试和发布构建配置一样,bjam会将其视为用户的feature variant定义。

    对于bjam,看起来有几种方法可以执行您想要的操作:

  • Define your own feature variant,然后为任何自定义标志更新CONFIG_COMMAND。
  • Define/redefine a toolset

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

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

    09-25 20:43