Je ne pose pas de questions sur les différents modules tiers disponibles qui prennent en charge Cppcheck d'une manière ou d'une autre.
Avec CMake 3.10, CMake semble avoir gagné un support officiel de Cppcheck. Voir CMAKE_ <LANG> _CPPCHECK .
Malheureusement, la documentation sur l'utilisation de cette variable est un peu clairsemée. Existe-t-il un bon exemple de la façon dont Cppcheck est censé être utilisé avec CMake 3.10 (ou version ultérieure)?
Un exemple simple serait - si vous avez cppcheck
dans votre PATH
et que vous ne spécifiez pas de paramètres supplémentaires - ce qui suit en définissant global CMAKE_<LANG>_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")
Les fichiers à analyser sont ajoutés automatiquement à la ligne de commande cppcheck
. Ainsi, l'exemple ci-dessus donne la sortie suivante (gcc
et cppcheck
sur le système 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
Vous pouvez essayer cppcheck
dans un projet existant en définissant simplement le CMAKE_CXX_CPPCHECK
variable via la ligne de commande cmake
:
# cmake -DCMAKE_CXX_CPPCHECK:FILEPATH=cppcheck ..
Un exemple plus "quotidien" vous permettrait probablement d'inclure quelque chose comme l'extrait de code suivant dans votre 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()
Références
<LANG>_CPPCHECK
propriété cible
Cette propriété n'est prise en charge que lorsque
<LANG>
estC
ouCXX
.Spécifiez une liste; contenant une ligne de commande pour l'outil d'analyse statique
cppcheck
. Les générateurs de Makefile et le générateur Ninja exécuterontcppcheck
avec le compilateur et signaleront tout problème.Cette propriété est initialisée par la valeur de
CMAKE_<LANG>_CPPCHECK
variable si elle est définie lors de la création d'une cible.