Closed KowerKoint closed 2 years ago
チュートリアルをdeveloper-docsに書いたのでそちらも合わせてご確認お願いします
cmakeのtargetを追加する話、test
ターゲットのCOMMAND
に今のスクリプトの内容を追加すればいいですか。
現状USE_TEST
がセットされていたらテストのコンパイル時にgcnoを生成するようになっているので問答無用でカウントはする状態になっていて、それならテストのデフォルトとしてカバレッジ生成を行うのでいいと思っています。
テストであっても明示したときのみ--coverage
を付けてビルドするようにするにはbuild/Makefile
にターゲットと「コンパイルオプションを追加する命令」が追加されるようにする必要があるんですがこの仕組みをよく理解していません…
generator expression を使えばフラグを渡したときだけカバレッジをとるようにはできそうですが,ややこしくなるので常にカバレッジをとるようにしていいと思います
明らかにCIでlcovを実行するのは無駄だしLinux以外(特にWindows)でlcovを導入するのは困難なのでやっぱりフラグを求めたほうが良さそうです…
makeのtargetとしてcoverage
を追加したんですが、現状
Capturing coverage data from build/src/csim/CMakeFiles/csim_static.dir build/src/cppsim/CMakeFiles/cppsim_static.dir build/src/cppsim_experimental/CMakeFiles/cppsim_exp_static.dir build/src/vqcsim/CMakeFiles/vqcsim_static.dir
Found gcov version: 9.4.0
Using intermediate gcov format
geninfo: ERROR: cannot read build/src/csim/CMakeFiles/csim_static.dir!
のようになって落ちてしまいます… 原因調査してますが、どうもよくわかってません😢
明らかにCIでlcovを実行するのは無駄だしLinux以外(特にWindows)でlcovを導入するのは困難なのでやっぱりフラグを求めたほうが良さそうです…
まだCIとlcovをよく見れていないのですが、Linux以外の環境依存する箇所があまりないのであればいいのでしょうけれど。。 まぁ、環境依存系のカバレッジをとるだけのジョブを追加して、定例とは別に手動なり、半自動なりで実行してもいいかも知れませんね。
ちょっとlcovやカバレッジ見てみます。。
makeのtargetとしてcoverageを追加したんですが、現状 原因調査してますが、どうもよくわかってませんcry
${CMAKE_CURRENT_SOURCE_DIR}/ をつけるとよいと思います。
@KowerKoint
${CMAKE_CURRENT_SOURCE_DIR}/ をつけるとよいと思います。
こんな感じです。
add_custom_target(coverage
DEPENDS test
COMMAND mkdir -p coverage
COMMAND lcov -d ${CMAKE_CURRENT_SOURCE_DIR}/build/src/csim/CMakeFiles/csim_static.dir -d ${CMAKE_CURRENT_SOURCE_DIR}/build/src/cppsim/CMakeFiles/cppsim_static.dir -d ${CMAKE_CURRENT_SOURCE_DIR}/build/src/cppsim_experimental/CMakeFiles/cppsim_exp_static.dir -d ${CMAKE_CURRENT_SOURCE_DIR}/build/src/vqcsim/CMakeFiles/vqcsim_static.dir -c -o ${CMAKE_CURRENT_SOURCE_DIR}/coverage/coverage.info
COMMAND lcov -r ${CMAKE_CURRENT_SOURCE_DIR}/coverage/coverage.info "*/include/*" -o ${CMAKE_CURRENT_SOURCE_DIR}/coverage/coverageFiltered.info
COMMAND genhtml -o ${CMAKE_CURRENT_SOURCE_DIR}/coverage/html --num-spaces 4 -s --legend ${CMAKE_CURRENT_SOURCE_DIR}/coverage/coverageFiltered.info
)
PR作るのめんどい。。
修正しました
ビルド後、make coverage -C build
でテストとともにカバレッジ生成できるのを確認してください。
test と coverage の生成できました 👍
make coverage -C build
自分も生成できました!
lcov を導入してテストのカバレッジを確認できるようにしました。
gcov/lcovの詳細な使い方は後でドキュメントに書きますが、
--coverage
をつけることでビルド時にgcno
ファイルが作られるgcda
ファイルが作られ、コードのどの部分が実行されていないか、どの部分は実行されていなかったかが書き込まれるlcov
を用いてこの情報をリッチなHTMLにコンバートし、視覚化するという流れになっています。
CMakeLists.txt
を書き換えたのでビルド→テストを実行した後script/generate_lcov_html.sh
を実行するとcoverage/html
にHTMLが作られます。index.html
をブラウザで開くと確認できるようになっています。