-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCPPCheck.cmake
52 lines (47 loc) · 1.79 KB
/
CPPCheck.cmake
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
function(cppcheck_sources target_name sources)
find_program(CPPCHECK cppcheck)
if (NOT CPPCHECK)
message(ERROR "Failed to find cppcheck")
endif()
find_package(Python3)
if (NOT Python3_FOUND)
message(ERROR "Failed to find 'python3'. It is required to use cppcheck")
endif()
if (NOT CMAKE_EXPORT_COMPILE_COMMANDS)
message(ERROR "'CMAKE_EXPORT_COMPILE_COMMANDS' is not set. It is required to use cppcheck")
endif()
set(FILTER_COMPILE_COMMANDS_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/scripts/filter-compile-commands.py")
if (NOT EXISTS "${FILTER_COMPILE_COMMANDS_SCRIPT}")
message(ERROR "'${FILTER_COMPILE_COMMANDS_SCRIPT}' does not exist. It is required to use cppcheck")
endif()
set(CPPCHECK_DIR "${CMAKE_CURRENT_BINARY_DIR}/cppcheck")
set(CPPCHECK_COMMANDS
"--enable=all"
"--cppcheck-build-dir=${CPPCHECK_DIR}"
"--error-exitcode=2"
"--inline-suppr"
"--project=compile_commands_filtered.json"
)
add_custom_target("${target_name}"
COMMAND
"${Python3_EXECUTABLE}"
"${FILTER_COMPILE_COMMANDS_SCRIPT}"
"${CMAKE_BINARY_DIR}/compile_commands.json"
"${CMAKE_BINARY_DIR}/compile_commands_filtered.json"
"_deps"
COMMAND
"${Python3_EXECUTABLE}"
"${FILTER_COMPILE_COMMANDS_SCRIPT}"
"${CMAKE_BINARY_DIR}/compile_commands_filtered.json"
"${CMAKE_BINARY_DIR}/compile_commands_filtered.json"
".cpmcache"
COMMAND
"${CMAKE_COMMAND}" "-E" "make_directory" "${CPPCHECK_DIR}"
COMMAND
"${CPPCHECK}" "${CPPCHECK_COMMANDS}" "${sources}"
COMMENT
"Running cppcheck"
COMMAND_EXPAND_LISTS
VERBATIM
)
endfunction()