【问题标题】:Using gcov with CMake step by step逐步使用 gcov 和 CMake
【发布时间】:2018-11-16 03:19:31
【问题描述】:

我正在尝试使用 this guide 在我正在处理的项目上运行 gcov。

我按照指南上的说明阅读了很多帖子,包括本网站上的detailed guide

但我不能让它工作。

我遵循的步骤是:

  1. 我项目的主要CMakeLists.txt 位于名为cmake 的文件夹中。在这个文件夹中,我创建了另一个名为CMakeModules 的文件夹,并将CodeCoverage.cmake 文件放入其中。

  2. 我将此代码添加到我的 CMakeLists.txt:

    set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/CMakeModules)
    if(CMAKE_COMPILER_IS_GNUCXX)
    include(CodeCoverage)
    APPEND_COVERAGE_COMPILER_FLAGS()
    SETUP_TARGET_FOR_COVERAGE(NAME coverage 
    EXECUTABLE 
    DEPENDENCIES coverage)
    endif()
    
  3. 我使用命令编译:

    cmake -DCMAKE_BUILD_TYPE=DEBUG ../cmake
    # (I'm compiling from a subfolder of the master folder)
    
    make
    
    make coverage
    
  4. 我在运行make coverage 命令时出错:

    [100%] Resetting code coverage counters to zero.
    Processing code coverage counters and generating report.
    
    Errno architecture (x86_64-linux-thread-multi-4.6.4-301.fc24.x86_64) does not match executable architecture (x86_64-linux-thread-multi-4.12.9-300.fc26.x86_64) at /usr/lib64/perl5/Errno.pm line 11.
    
    Compilation failed in require at /usr/share/perl5/vendor_perl/File/Temp.pm line 17.
    
    BEGIN failed--compilation aborted at /usr/share/perl5/vendor_perl/File/Temp.pm line 17.
    
    Compilation failed in require at /usr/bin/lcov line 66.
    
    BEGIN failed--compilation aborted at /usr/bin/lcov line 66.
    
    CMakeFiles/coverage.dir/build.make:57: set di istruzioni per l'obiettivo "CMakeFiles/coverage" non riuscito
    
    make[3]: *** [CMakeFiles/coverage] Error 255
    
    CMakeFiles/Makefile2:178: set di istruzioni per l'obiettivo "CMakeFiles/coverage.dir/all" non riuscito
    
    make[2]: *** [CMakeFiles/coverage.dir/all] Errore 2
    CMakeFiles/Makefile2:185: set di istruzioni per l'obiettivo "CMakeFiles/coverage.dir/rule" non riuscito
    
    make[1]: *** [CMakeFiles/coverage.dir/rule] Errore 2
    
    Makefile:214: set di istruzioni per l'obiettivo "coverage" non riuscito
    make: *** [coverage] Errore 2
    

我的问题是:

究竟应该在 EXECUTABLE 插槽中放入什么?启动程序的可执行文件的路径?

程序的设置可以通过我写的那一行来完成吗?

我已经尝试过这个网站上其他线程的解决方案,但我无法建议我如何完成这项工作。

【问题讨论】:

    标签: c++ linux cmake code-coverage gcov


    【解决方案1】:

    EXECUTABLE 选项应定义如何在您的代码上运行某些内容并生成覆盖率数据。

    例如,它应该是运行所有测试的指令。

    如果您使用 ctest 定义了测试,请尝试以下操作:

    SETUP_TARGET_FOR_COVERAGE(NAME coverage 
                              EXECUTABLE ctest)
    

    (或者ctest --parallel n,如果你有很多测试和不止一个处理器!) 如果您有一个运行某些测试的特定目标,请尝试以下操作:

    SETUP_TARGET_FOR_COVERAGE(NAME coverage 
                              EXECUTABLE make target)
    

    希望这会有所帮助!

    【讨论】:

    • 谢谢马努!现在对我来说很清楚了!错误是我正在链接程序的可执行文件,所以它不起作用!
    猜你喜欢
    • 2022-01-24
    • 2023-04-02
    • 2012-09-20
    • 2015-08-01
    • 2011-08-30
    • 2015-07-06
    • 2012-10-18
    • 1970-01-01
    相关资源
    最近更新 更多