私はプロジェクトでCMakeを使用し、継続的/夜間のビルド用にcdashサーバーをセットアップしています。すべてがうまく機能し、crontabを設定することにより、cdashサーバーに毎時間/毎晩のビルド/テスト結果が自動的にアップロードされます。
次のステップは、テストカバレッジレポートをビルドに追加することです。このドキュメントはここにあります http://www.cmake.org/Wiki/CTest:Coverage しかし、率直に言って、実用的なガイドとは少し異なります。
現在、必要なフラグを追加しました(-fprofile-arcs -ftest-coverage
、私は--coverage
改善)、コンパイルプロセスは.gcnoファイルを生成します。しかし、その後、私は立ち往生しています。コマンド
make NightlyCoverage
何もしないようです。誰が次に何をすべきか教えてもらえますか?私が望む結果は、make NightlyCoverage
、カバレッジレポートが生成され、cdashサーバーにアップロードされます。
https://github.com/bilke/cmake-modules/blob/master/CodeCoverage.cmake を正常に使用しています。
ガイドラインに従ってください:CMAKE_MODULE_PATH
ディレクトリにファイルを追加し、追加しました
set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/CMakeModules)
if(CMAKE_COMPILER_IS_GNUCXX)
include(CodeCoverage)
setup_target_for_coverage(${PROJECT_NAME}_coverage ${PROJECT_TEST_NAME} coverage)
endif()
CMakeLists.txt
で。また、ターゲットの依存関係としてgcov
を手動で追加しました。
if(CMAKE_COMPILER_IS_GNUCXX)
target_link_libraries(${PROJECT_TEST_NAME} gcov)
endif()
これで、入力するだけです
make my_project_coverage
ビルドツリーのcoverage
ディレクトリでhtmlレポートを取得します。
プロジェクト 'foo'を次のように設定しました。 https://github.com/bilke/cmake-modules/blob/master/CodeCoverage.cmake からcmakeファイルをサブディレクトリ「cmake_modules」にコピーしました。 add_executable(foo ...)
の後のCMakeLists.txtファイルで、次を追加しました。
if(CMAKE_COMPILER_IS_GNUCXX)
LIST(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake_modules")
include(CodeCoverage)
APPEND_COVERAGE_COMPILER_FLAGS()
set(COVERAGE_LCOV_EXCLUDES 'dir1/*' 'dir2/*') // this is optional if you want to exclude some directory from the report
SETUP_TARGET_FOR_COVERAGE_LCOV(NAME foo_coverage
EXECUTABLE foo
DEPENDENCIES foo)
endif()
Cmakeの後、ターゲットmake make foo_coverageをビルドし、buildフォルダーのfoo_coverageフォルダーにあるindex.htmlファイルでレポートを開きます。
gcovr
を使用してGCCコードカバレッジレポートをCodeCoverage.cmake
なしで作成するい方法があります。すべての*.gcno
および*.gcda
ファイルをプロジェクトルートディレクトリに移動してgcovr
を実行します
$ cd /path/to/your/project
$ mkdir build && cd build && cmake ..
$ make && make test
$ find . -type f \( -iname \*.gcno -or -iname \*.gcda \) -exec cp {} .. \;
$ cd ..
$ gcovr -v -r .