настройка покрытия c ++ с помощью CMake - PullRequest
0 голосов
/ 05 марта 2019

У меня есть проект CMake, который иногда может использовать clang, иногда он может использовать gcc, иногда он может использовать MSVC.Предоставляет ли CMake какой-либо универсальный способ включить генерацию покрытия, или мне нужно это сделать, если он сам по себе (флаги компилятора для gcc и clang различаются, а MSVC не имеет покрытия)?

1 Ответ

0 голосов
/ 05 марта 2019

Нет центральной опции cmake, чтобы справиться с такой ситуацией, но некоторые решения могут быть:

  • Ничего не делать.Соберите статистику покрытия с помощью kcov, для которого не требуются специальные флаги компилятора.
  • Добавьте конфигурацию сборки наряду с обычными Debug, RelWithDebugInfo и так далее.Затем выбирайте эту конфигурацию сборки только тогда, когда это имеет смысл, т. Е. При компиляции с clang или gcc.Вот так:

    set(CMAKE_BUILD_TYPE "${CMAKE_BUILD_TYPE}" CACHE STRING
        "Build options: None Debug Release RelWithDebInfo MinSizeRel Coverage." FORCE)
    
    # Use generator expression to enable flags for the Coverage profile
    target_compile_options(yourExec
        $<$<CONFIG:COVERAGE>:--coverage>)
    
    # Don't forget that the linker needs a flag, too:
    target_link_libraries(yourExec
        PRIVATE $<$<CONFIG:COVERAGE>:--coverage>)
    

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

    $<$<OR:$<CXX_COMPILER_ID:AppleClang>,
        $<CXX_COMPILER_ID:Clang>,$<CXX_COMPILER_ID:GNU>>:-someOtherFlag>
    

    , но, насколько я знаю, нетреальные различия между clang и gcc относительно флагов покрытия.

  • Не добавляйте другую конфигурацию сборки, просто определите вышеупомянутые флаги для конфигурации сборки, которую вы собираетесь использовать дляотчеты о покрытии, вероятно, Debug.Тогда, очевидно, необходимо исключить MSVC.

    target_compile_options(yourExec
        $<$<AND:$<CONFIG:DEBUG>,$<NOT:CXX_COMPILER_ID:MSVC>>:--coverage>)
    
    target_link_libraries(yourExec
        PRIVATE $<$<AND:$<CONFIG:DEBUG>,$<NOT:CXX_COMPILER_ID:MSVC>>:--coverage>)
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...