CMAKE условно запустить cppcheck

У меня есть файл CMake, который определяет cppcheck, как описано в поддержка Cppcheck в CMake работает отлично, но я хочу чтобы иметь возможность компилировать свой код снова и снова и не запускать cppcheck, пока я не подумаю, что я близок к завершению, а затем запускать cppcheck перед фиксацией.

cppcheck слишком медленный, чтобы включать его в мой цикл редактирования/компиляции/тестирования/отладки.

Какова наилучшая практика для этого? Я думаю что-то вроде определения переменной и создания файлов, а также сборки, сборки и сборки. например

В CMakeLists.txt

if(CPPCHECK STREQUAL "yes")
  set(CMAKE_CXX_CPPCHECK "cppcheck")
endif()

Во время написания кода

cmake3 -G "Unix Makefiles" ..
cmake3  --build . 
cmake3  --build .

Затем перед фиксацией кода

cmake3 -G "Unix Makefiles" -DCPPCHECK=yes ..
cmake3  --build . 

Есть ли способ лучше?


person Marc    schedule 09.07.2019    source источник
comment
Создайте пользовательскую цель с помощью add_custom_target и запускайте ее с помощью make yourtarget в любое время.   -  person arrowd    schedule 09.07.2019


Ответы (1)


Я делаю это в основном так же, как описанный вопрос - запускать анализ кода только в том случае, если установлена ​​​​определенная переменная. Обычно я следую такому шаблону в моем верхнем уровне CMakeLists.txt:

option(ENABLE_CODE_ANALYSIS "Run code analysis" OFF)
message(STATUS "ENABLE_CODE_ANALYSIS       ${ENABLE_CODE_ANALYSIS}")

if(ENABLE_CODE_ANALYSIS)
    find_program(cppcheck cppcheck)
    message(STATUS "cppcheck                   ${cppcheck}")
    if(NOT (cppcheck MATCHES "NOTFOUND"))
        # Notes:
        # - unmatchedSuppression needed since not all source files are
        #   analyzed simultaneously
        # - unusedFunction needed since not all source files are
        #   analyzed simultaneously
        # - template needed to force "warning" into output string, and
        #   to make the 'id' available for suppression
        set(CMAKE_CXX_CPPCHECK "${cppcheck}"
            "--enable=all"
            "--inconclusive"
            "--inline-suppr"
            "--quiet"
            "--suppress=unmatchedSuppression"
            "--suppress=unusedFunction"
            "--template='{file}:{line}: warning: {id} ({severity}): {message}'")
    endif()
endif(ENABLE_CODE_ANALYSIS)

Обычно я делаю то же самое для clang-tidy, а ENABLE_CODE_ANALYSIS включаю как cppcheck, так и clang-tidy.

Я по умолчанию не анализирую код, потому что анализ кода имеет тенденцию быть медленным. Но его можно включить, выполнив cmake -G "my generator" -DENABLE_CODE_ANALYSIS=ON .. при создании системы сборки.

person Eric Backus    schedule 11.09.2020