ソースファイルのgoogletestユニットテストを作成し、カバレッジ結果にgcovを使用し、最後にlcovを使用してhtmlドキュメントを生成することにより、ライブラリファイルfoobar.cppのカバレッジ結果を収集しようとしています。
単体テストと gcov の結果は正常に動作するようになりましたが、lcov は適切なカバレッジ結果を表示せず、foobar.cpp .gcov の結果を完全に省略していますか?
基本的に次のようにセットアップされた単体テストプラットフォームがあります。
ディレクトリ:
~/svn/googletest-read-only/
/src
gtest_main.cc
gtest-all.cc
/include
~/code/proj/
foobar.cpp
foobar.hpp
~/code/proj/unittest/
foobar_test.cpp
Makefile
すべてがunittest /から実行され、このフォルダーにunittest/ $ make
実行可能な foobar_testが作成されます。main()はgoogletest/src/gtest_main.ccファイルにあります。私の Makefile は googletest に基づいており、次の注目すべき設定があります。
メイクファイル:
CXXFLAGS += -g -O0 --coverage -fprofile-arcs -ftest-coverage -Wall -Wextra -pthread
LDFLAGS = -lpthread -lgcov
foobar_test : foobar.o foobar_test.o gtest_main.a
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) $^ -o $@
実行可能ファイルを 1 回実行します$ ./foobar_test
。これにより、各ソースの .gcno に一致する .gcda が生成されます (合計 4 倍: foobar、foobar_test、gtest_main、および gtest-all)。
次に$ gcov foobar.cpp
、foobar.cpp のみで実行します (代替手段も試しまし$ gcov *.cpp
た... foobar_test.cpp のみを使用しても機能しません)。これにより、一連の /usr/lib がらくたを含む stdout が生成されますが、MY 結果も生成されます。実行された行: 80 の 61.25%。..`を実行し、.gcov ファイルを作成します。
私の .cpp.gcov ファイルを調べると、上記のように 61.25% の行で適切なヒットが表示されます。この時点で、4x の .gcda、4x の gcno、および約 20x の他の .gcov ファイルがあります。
ここで lcov を使用しようとすると、うまくいきませlcov --directory . -c -o result.info
ん。
結果:
Capturing coverage data from .
Found gcov version: 4.4.7
Scanning . for .gcda files ...
Found 4 data files in .
Processing ./gtest_main.gcda
geninfo: WARNING: cannot find an entry for foobar.cpp.gcov in .gcno file, skipping file!
geninfo: WARNING: cannot find an entry for *more c++ files*.gcov in .gcno file, skipping file!
Processing ./foobar.gcda
geninfo: WARNING: no data found for /home/asdf/code/proj/foobar.cpp
Processing ./foobar_test.gcda
geninfo: WARNING: no data found for /home/asdf/code/proj/unittest/foobar_test.cpp
Processing ./gtest-all.gcda
Finished .info-file creation```
aの後にlcov出力を表示すると、$ genhtml report.info --output-directory report && firefox report/index.html
foobar *ファイルを含まないディレクトリが約5つしか表示されませんか?
複数の組み合わせを試しまし$ gcov []cpp
た$ lcov --base-directory [] --directory [] -c -o
が、役に立ちませんでした。また、いくつかのソースファイルをソフトリンクしようとしましたが、助けにはなりませんでした。
セットアップまたはコマンドで何を変更する必要がありますか?? コメント投稿者は、より良い解決策を提案することを歓迎します。