我想要为一个主要由C++编写的项目集成一个非平凡的跨平台构建系统。目前,我已经评估了Cmake和Scons,虽然它们都比(GNU) make有所改进,但在我试图使用这些工具的背景下,它们似乎既不优雅也不透明。这让我想到了Boost Build (Bjam),我很鼓舞,因为我的项目依赖于Boost,在任何可行的目标平台上应该都可以使用bjam。
我遇到了困难,试图为一个库的单元测试整洁地集成代码覆盖率...并最终集成到像Jenkins这样的构建服务器中。虽然我愿意通过Bjam的最佳/标准做法来指导,但我认为我需要三个不同的“变体”:
- 发布版 - 只构建优化的静态库
- 调试版 - 构建非优化的静态库和单元测试
- 覆盖率版 - 构建带覆盖率功能的库,并与不带覆盖率功能的单元测试链接。
基本上,除了标准的调试和发布构建之外,我还希望拥有一个特殊用途的调试构建,可以收集覆盖数据。
我需要使用(至少)g++和msvc进行构建...并仅在g++中使用gcov开关。这意味着我的库目标需要不同的“编译器标志”来匹配单元测试可执行文件目标...而且只针对其中一个编译套件...以及只有一个变体。
我不清楚如何最好地使用Bjam实现此目标,虽然我怀疑它应该是一个相当常见的用例。Bjam是否明确支持gcov覆盖分析(可能使用lcov呈现结果)?如果没有,还有人可以推荐一种支持上述(简化的)场景的策略吗?