我希望为主要用 C++ 编写的项目集成一个重要的跨平台构建系统。到目前为止,我已经评估了 Cmake 和 Scons,虽然它们都代表了对 (GNU) make 的改进,但在我尝试使用这些工具的上下文中,这两种方法似乎既不优雅也不透明。这让我想到了 Boost Build (Bjam),我很受鼓舞的是,鉴于我的项目依赖于 Boost,bjam 应该已经可用于任何可行的目标平台。
我在尝试为库的单元测试巧妙地集成代码覆盖率时遇到了困难......以最终集成到构建服务器(如 Jenkins)中。虽然我愿意以 Bjam 最佳/标准实践为指导,但我认为我需要三个不同的“变体”:
- release - 仅构建优化的静态库
- debug - 构建非优化的静态库和单元测试
- 覆盖 - 构建支持覆盖的库并与未启用覆盖的单元测试链接。
本质上,除了标准的调试和发布版本之外,我还想要一个专用的调试版本,它还可以收集覆盖率数据。
我需要使用(至少)g++ 和 msvc 构建......并且仅使用 g++ 使用 gcov 开关。这意味着我的库目标需要与单元测试可执行目标不同的“编译器标志”......并且仅适用于我的一个编译器套件......并且仅适用于一个变体。
我不清楚如何最好地使用 Bjam 来实现这一点——不过,我怀疑它应该是一个相当常见的用例。Bjam 是否明确支持 gcov 覆盖分析(可能使用 lcov 呈现结果)?如果没有,任何人都可以推荐一种支持上述(简化)方案的策略吗?