Поддержка Cppcheck в cmake

Я не спрашиваю о различных доступных модулях thirdparty, которые так или иначе поддерживают cppcheck.

с cmake 3.9 cmake, похоже, получил некоторую официальную поддержку cppcheck. см.CMAKE__CPPCHECK

к сожалению, документация по использованию этой переменной немного разрежена. У кого-нибудь есть хороший пример того, как cppcheck должен использоваться с cmake >3.9?

1 ответов


An простой пример: было бы - если у вас есть cppcheck в своем PATH и вы не указываете дополнительные параметры-следующее, установив global CMAKE_<LANG>_CPPCHECK переменной:

cmake_minimum_required(VERSION 3.10)

project(CppCheckTest)

file(
    WRITE "main.cpp"
[=[
int main()
{
    char a[10];
    a[10] = 0;
    return 0;
}
]=] 
)

set(CMAKE_CXX_CPPCHECK "cppcheck")
add_executable(${PROJECT_NAME} "main.cpp")

файлы для сканирования автоматически добавляются в cppcheck командная строка. Таким образом, приведенный выше пример дает следующий вывод (gcc и cppcheck в системе Linux):

# make
Scanning dependencies of target CppCheckTest
[ 50%] Building CXX object CMakeFiles/CppCheckTest.dir/main.cpp.o
Checking .../CppCheckTest/main.cpp...
Warning: cppcheck reported diagnostics:
[/mnt/c/temp/StackOverflow/CppCheckTest/main.cpp:4]: (error) Array 'a[10]' accessed at index 10, which is out of bounds.
[100%] Linking CXX executable CppCheckTest
[100%] Built target CppCheckTest

вы могли бы дать cppcheck попробуйте в существующем проекте, просто установка CMAKE_CXX_CPPCHECK переменной через cmake командная строка:

# cmake -DCMAKE_CXX_CPPCHECK:FILEPATH=cppcheck ..

более" повседневная жизнь " пример, вероятно, для вас, чтобы включить что-то вроде следующего фрагмента кода в вашем CMakeList.txt:

find_program(CMAKE_CXX_CPPCHECK NAMES cppcheck)
if (CMAKE_CXX_CPPCHECK)
    list(
        APPEND CMAKE_CXX_CPPCHECK 
            "--enable=warning"
            "--inconclusive"
            "--force" 
            "--inline-suppr"
            "--suppressions-list=${CMAKE_SOURCE_DIR}/CppCheckSuppressions.txt"
    )
endif()

ссылки