Files
cmake-examples/04-static-analysis/cppcheck/cmake/analysis.cmake
Karl Nilsson f1f7c85d95 spelling fixes
2020-01-17 19:48:14 -05:00

51 lines
2.0 KiB
CMake

# Make sure cppcheck binary is available
if( NOT CPPCHECK_FOUND )
find_package(CppCheck)
endif()
# add a target for CppCheck
# _target - The name of the project that this is for. Will generate ${_target}_analysis
# _sources - The name of the variable holding the sources list.
# This is the name of the variable not the actual list
#
# Macro instead of function to make the PARENT_SCOPE stuff easier
macro(add_analysis _target _sources)
if( CPPCHECK_FOUND )
# Get the include files to also feed to cppcheck
get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
foreach(dir ${dirs})
LIST(APPEND cppcheck_includes "-I${dir}")
endforeach()
# Add to the all target to have a high level "make analysis"
LIST(APPEND ALL_ANALYSIS_TARGETS "${_target}_analysis")
set(ALL_ANALYSIS_TARGETS "${ALL_ANALYSIS_TARGETS}" PARENT_SCOPE)
# This is used to make the command run correctly on the command line.
# The COMMAND argument expects a list and this does the change
# I need to check which version works with 2.7
if (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VESION} GREATER 2.7)
separate_arguments(tmp_args UNIX_COMMAND ${CPPCHECK_ARG})
else ()
# cmake 2.6 has different arguments
string(REPLACE " " ";" tmp_args ${CPPCHECK_ARG})
endif ()
# add a custom _target_analysis target
add_custom_target(${_target}_analysis)
set_target_properties(${_target}_analysis PROPERTIES EXCLUDE_FROM_ALL TRUE)
# add the cppcheck command to the target
add_custom_command(TARGET ${_target}_analysis PRE_BUILD
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
COMMAND ${CPPCHECK_BIN} ${tmp_args} ${cppcheck_includes} ${${_sources}}
DEPENDS ${${_sources}}
COMMENT "Running cppcheck: ${_target}"
VERBATIM)
message("adding cppcheck analysys target for ${_target}")
endif()
endmacro()