mirror of
https://github.com/ttroy50/cmake-examples.git
synced 2025-12-18 20:24:35 +03:00
add the static analysis target with a quick explaination
This commit is contained in:
50
04-static-analysis/cppcheck/cmake/analysis.cmake
Normal file
50
04-static-analysis/cppcheck/cmake/analysis.cmake
Normal file
@@ -0,0 +1,50 @@
|
||||
# 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 argumetn 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()
|
||||
|
||||
Reference in New Issue
Block a user