Использование gcov с CMake шаг за шагом - PullRequest
0 голосов
/ 06 июня 2018

Я пытаюсь запустить gcov над проектом, над которым я работаю, используя это руководство .

Я следовал инструкции в руководстве и прочитал много постов, в том числе подробное руководство на этом сайте.

Но я не могу заставить его работать.

Шаги, которые я выполнил:

  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?Путь к исполняемому файлу, который запускает программу?

Установка программы может быть выполнена только той строкой, которую я написал?

Я уже пробовал решение из других потоков на этом сайте, ноЯ не могу ничего предложить мне, как сделать эту работу.

1 Ответ

0 голосов
/ 06 июня 2018

Опция EXECUTABLE должна определять, как что-то запускать в вашем коде и генерировать данные покрытия.

Например, это должна быть инструкция, которая запускает все ваши тесты.

Если выопределите тест с помощью ctest, попробуйте что-то вроде:

SETUP_TARGET_FOR_COVERAGE(NAME coverage 
                          EXECUTABLE ctest)

(или ctest --parallel n, если у вас много тестов и более одного процессора!) Если у вас есть конкретная цель, которая выполняет какой-то тест, топопробуйте что-то вроде:

SETUP_TARGET_FOR_COVERAGE(NAME coverage 
                          EXECUTABLE make target)

Надеюсь, это поможет!

...