web-dev-qa-db-ja.com

CMakeでのCppcheckのサポート

私は、Cppcheckを何らかの方法でサポートするさまざまなサードパーティモジュールについては尋ねていません。

CMake 3.10では、CMakeは公式のCppcheckサポートを獲得したようです。 CMAKE_ <LANG> _CPPCHECK を参照してください。

残念ながら、この変数の使用方法に関するドキュメントは少しまばらです。 CppcheckをCMake 3.10(またはそれ以降)で使用する方法の良い例はありますか?

14
arved

単純な例 は、cppcheckPATHがあり、追加のパラメーターを指定しない場合-グローバル 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コマンドラインに自動的に追加されます。したがって、上記の例では次の出力が得られます(Linuxシステムではgccおよびcppcheck):

# 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()

参考文献

17
Florian