web-dev-qa-db-ja.com

CMake / CDashでgcovを使用するための詳細ガイド?

私はプロジェクトでCMakeを使用し、継続的/夜間のビルド用にcdashサーバーをセットアップしています。すべてがうまく機能し、crontabを設定することにより、cdashサーバーに毎時間/毎晩のビルド/テスト結果が自動的にアップロードされます。

次のステップは、テストカバレッジレポートをビルドに追加することです。このドキュメントはここにあります http://www.cmake.org/Wiki/CTest:Coverage しかし、率直に言って、実用的なガイドとは少し異なります。

現在、必要なフラグを追加しました(-fprofile-arcs -ftest-coverage、私は--coverage改善)、コンパイルプロセスは.gcnoファイルを生成します。しかし、その後、私は立ち往生しています。コマンド

make NightlyCoverage

何もしないようです。誰が次に何をすべきか教えてもらえますか?私が望む結果は、make NightlyCoverage、カバレッジレポートが生成され、cdashサーバーにアップロードされます。

44
Ralph Zhang

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レポートを取得します。

46
rcomblen

プロジェクト '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ファイルでレポートを開きます。

3
psalong

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 .
1
xl4times