如何在Cmake中使用gcov

fed*_*est 4 c++ cmake gcov

我有困难按照本指南(我在其他帖子上看到推荐)的问题https://github.com/bilke/cmake-modules/blob/master/CodeCoverage.cmake

第一:

将此文件复制到cmake模块路径中.

我怎么知道我的cmake模块路径是什么?

使用函数SETUP_TARGET_FOR_COVERAGE创建自定义make目标

这究竟是什么意思?我怎么做?特别是,我需要输入什么以及在哪里?

我被迫用cmake编译应用程序,否则我会用gcc来编译它.

gal*_*h83 5

您可以通过调用来设置cmake模块路径 set(CMAKE_MODULE_PATH <path>)

cmake模块路径设置告诉cmake在哪里查找cmake模块,如include宏包含的模块.

例如,我使用CodeCoverage.cmake的步骤是:

  1. 将CodeCoverage.cmake复制到'scripts/cmake'的源文件夹中.
  2. 将以下内容添加到我的CMakeLists.txt:

    set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/scripts/cmake)
    
    if (CMAKE_BUILD_TYPE STREQUAL "Coverage")
        include(CodeCoverage)
        setup_target_for_coverage(${PROJECT_NAME}_coverage ${TEST_TARGET} coverage)
    
        SET(CMAKE_CXX_FLAGS "-g -O0 -fprofile-arcs -ftest-coverage")
        SET(CMAKE_C_FLAGS "-g -O0 -fprofile-arcs -ftest-coverage")
    endif() #CMAKE_BUILD_TYPE STREQUAL "Coverage"
    
    Run Code Online (Sandbox Code Playgroud)
  3. 运行cmake-DCMAKE_BUILD_TYPE=Coverage

  4. make

  5. make <coverage_target>

注意:

  • ${TEST_TARGET} 是我在脚本中先前创建的单元测试目标名称设置的变量.
  • <coverage_target>是由...生成的任何字符串${PROJECT_NAME}_coverage.
  • 您不必if像我一样包装创建的覆盖范围.
  • 由于我使用AppleClang,我必须修复CodeCoverage.cmake脚本以允许它.它的编写方式现在允许gcc和clang 3.0.0或更新版本.

  • 我在 CodeCoverage.cmake 中找不到 `setup_target_for_coverage` 函数。对我有用的:`setup_target_for_coverage_gcovr_xml(${PROJECT_NAME}_coverage NAMEcoverage)`(然后进行&amp;&amp;进行覆盖) (2认同)