Cppcheck support in CMake

前端 未结 1 887
抹茶落季
抹茶落季 2020-12-09 03:55

I am not asking about the various available third-party modules that support Cppcheck in one way or the other.

With CMake 3.10, CMake seems to have gained some offic

1条回答
  •  执笔经年
    2020-12-09 04:20

    An simple example would be - if you have cppcheck in your PATH and you are not specifying additional parameters - the following by setting global CMAKE__CPPCHECK variable:

    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")
    

    The files to scan are added automatically to the cppcheck command line. So the above example gives the following output (gcc and cppcheck on Linux system):

    # 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
    

    You could give cppcheck a try in an existing project by simply setting the CMAKE_CXX_CPPCHECK variable via the cmake command line:

    # cmake -DCMAKE_CXX_CPPCHECK:FILEPATH=cppcheck ..
    

    A more "daily life" example would probably for you to include something like the following code snippet in your 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()
    

    References

    • CMake Commit: Add properties to run cppcheck along with the compiler
    • _CPPCHECK target property

      This property is supported only when is C or CXX.

      Specify a ;-list containing a command line for the cppcheck static analysis tool. The Makefile Generators and the Ninja generator will run cppcheck along with the compiler and report any problems.

      This property is initialized by the value of the CMAKE__CPPCHECK variable if it is set when a target is created.

    0 讨论(0)
提交回复
热议问题