--coverage をつけてビルドエラーが起きた
状況
- --coverageをコンパイルオプションに追加するビルドに失敗した。
- 一方で、コンパイルオプションに-fprofile-arcs, -ftest-coverage、リンカオプションに-lgcov だとビルドが成功した
- 公式ページには --coverageをコンパイルオプションに指定すると「コンパイルオプションに-fprofile-arcs, -ftest-coverage、リンカオプションに-lgcov」を指定した場合と同じ動作になる。と書いてある
ChatGPTさんに質問した結果
-fprofile-arcs
および -ftest-coverage
オプションを使用することで、--coverage
オプションと同様の結果が得られます。--coverage
オプションは、実際にはこれらのオプションの組み合わせを指定しているだけです。ただし、いくつかのプロジェクトや環境では、これらのオプションを個別に指定する方が正しく動作することがあります。
以下のような理由で、個別にオプションを指定した場合にビルドが成功する場合があります。
環境やツールチェーンの違い: ある環境やツールチェーンでは、
--coverage
オプションが正しく動作しないことがあります。この場合、個別にオプションを指定することで問題を回避できることがあります。コンパイラのバージョン: コンパイラのバージョンによっては、
--coverage
オプションの動作が異なることがあります。古いコンパイラでは、--coverage
オプションが完全にサポートされていないかもしれません。そのため、個別のオプションを指定することで、問題が解決されることがあります。リンク順序の問題:
--coverage
オプションを使用すると、コンパイラが追加するライブラリのリンク順序が変更されることがあります。これにより、リンクエラーが発生することがあります。個別のオプションを指定することで、リンク順序が適切になり、エラーが解決されることがあります。
最終的に、コンパイルオプションに -fprofile-arcs
と -ftest-coverage
を、リンクオプションに -lgcov
を追加することでビルドが成功した場合、これらのオプションを使用してコードカバレッジ情報を収集できます。問題が解決されたのであれば、この設定をそのまま使用して問題ありません。
思ったこと
- 3つめの理由が怪しいかな。
- リンカが通らないと怒られていたので。
- 先輩にコメントもらうまで、その対応方法を試さなかったので、次回からは同様な事象(まとめてやってくれるオプションの挙動がおかしい)が起こったときは、個別にオプション指定してみるようなアクションを取れるようにしたい。