私は、Cppcheckを何らかの方法でサポートするさまざまなサードパーティモジュールについては尋ねていません。
CMake 3.10では、CMakeは公式のCppcheckサポートを獲得したようです。 CMAKE_ <LANG> _CPPCHECK を参照してください。
残念ながら、この変数の使用方法に関するドキュメントは少しまばらです。 CppcheckをCMake 3.10(またはそれ以降)で使用する方法の良い例はありますか?
単純な例 は、cppcheck
にPATH
があり、追加のパラメーターを指定しない場合-グローバル 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()
参考文献
このプロパティは、
<LANG>
がC
またはCXX
の場合にのみサポートされます。
cppcheck
静的分析ツールのコマンドラインを含む; -listを指定します。 Makefile GeneratorsおよびNinja Generatorは、コンパイラーとともにcppcheck
を実行し、問題を報告します。このプロパティは、ターゲットの作成時に設定される場合、
CMAKE_<LANG>_CPPCHECK
変数の値によって初期化されます。