主に C++ で記述されたプロジェクトに、重要なクロスプラットフォーム ビルド システムを統合しようとしています。私はこれまで Cmake と Scons を評価してきましたが、どちらも (GNU) make よりも改善されていますが、私がこれらのツールを使用しようとしていたコンテキストでは、どちらのアプローチもエレガントでも透過的でもないように見えました。これにより、Boost Build (Bjam) にたどり着きました。私のプロジェクトが Boost に依存していることを考えると、bjam は実行可能なターゲット プラットフォームで既に利用できるはずです。
Jenkins などのビルド サーバーへの最終的な統合を視野に入れて、ライブラリの単体テスト用のコード カバレッジをきちんと統合しようとするのが困難になりました。私は Bjam のベスト/スタンダード プラクティスに進んで従いますが、3 つの異なる「バリエーション」が必要だと思います。
- release - 最適化された静的ライブラリのみをビルドする
- debug - 最適化されていない静的ライブラリと単体テストをビルドする
- カバレッジ - カバレッジ対応のライブラリを構築し、カバレッジ対応でない単体テストとリンクします。
基本的に、標準のデバッグ ビルドとリリース ビルドに加えて、カバレッジ データも収集する特別な目的のデバッグ ビルドが必要です。
(少なくとも) g++ と msvc でビルドする必要があり、gcov スイッチは g++ でのみ使用します。これは、私のライブラリ ターゲットが単体テストの実行可能ターゲットとは異なる "compilerflags" を必要とすることを意味します...そして、私のコンパイラ スイートの 1 つに対してのみ...そして 1 つのバリアントに対してのみです。
Bjam でこれを実現する最善の方法はわかりませんが、かなり一般的な使用例であると思います。Bjam は gcov カバレッジ分析 (おそらく lcov を使用して結果を提示する) を明示的にサポートしていますか? そうでない場合、上記の(単純化された)シナリオをサポートする戦略を誰かが推奨できますか?