Cppcheck Cmake интеграция: отменить сборку по предупреждению - PullRequest
2 голосов
/ 27 января 2020

Я только начал использовать cppcheck в C++ проекте и узнал, что его можно интегрировать в cmake. В моем проекте cmake я интегрировал его в файл CMakeLists.txt через

find_program(CMAKE_CXX_CPPCHECK NAMES cppcheck)
if(NOT CMAKE_CXX_CPPCHECK)
  message(FATAL_ERROR "Could not find the program cppcheck.")
endif()
list(APPEND CMAKE_CXX_CPPCHECK "--enable=all" )

Теперь, во время процесса компиляции, cppcheck работает нормально. Я установил -WError для всех моих предупреждений компилятора, есть ли способ сделать то же самое для cppcheck, то есть сделать сбой сборки в случае выдачи предупреждения cppcheck?

1 Ответ

3 голосов
/ 27 января 2020

Когда программа make вызывает программы, такие как компилятор, компоновщик или любой другой инструмент, такой как cppcheck, в вашем случае, тогда оценивается возвращаемое значение программы. Если какая-либо программа возвращает значение 0, то make считает это успешным, поэтому оно продолжается. Если какая-либо программа возвращает другое значение, то 0, тогда make завершается ошибкой и не продолжается. Это известное соглашение. Поэтому все, что вам нужно сделать, это настроить cppcheck таким образом, чтобы он возвращал 0 в случае успеха, и другое значение в случае сбоя. Этого можно добиться с помощью параметра --error-exitcode=1:

list(APPEND CMAKE_CXX_CPPCHECK "--enable=all" "--error-exitcode=10")

Из документации cppcheck:

--error-exitcode=<n> If errors are found, integer [n] is returned instead of
                     the default '0'. '1' is returned
                     if arguments are not valid or if no input files are
                     provided. Note that your operating system can modify
                     this value, e.g. '256' can become '0'.

Однако это также не удастся, если есть какие-либо сообщение cppcheck. Возможно, вам нужно настроить переключатель enable на классы серьезности, которые вас интересуют. В качестве альтернативы, вы можете подавлять сообщения, см. Документацию командной строки cppcheck, как этого добиться.

...