75 lines
2.3 KiB
CMake
75 lines
2.3 KiB
CMake
INCLUDE(CheckParent)
|
|
find_program(CPPCHECK NAMES cppcheck)
|
|
|
|
#
|
|
# check if the GENERATE_CPPCHECK function has already been defined
|
|
#
|
|
get_property(_GENERATE_CPPCHECK GLOBAL PROPERTY _GENERATE_CPPCHECK)
|
|
IF (NOT _GENERATE_CPPCHECK)
|
|
|
|
# set that we have defined GENERATE_CCCC
|
|
set_property(GLOBAL PROPERTY _GENERATE_CPPCHECK "YES")
|
|
|
|
FUNCTION(GENERATE_CPPCHECK)
|
|
IF(NOT TARGET cppcheck)
|
|
IF(CPPCHECK)
|
|
CMAKE_PARSE_ARGUMENTS(ARG "" "" "TARGETS" ${ARGN})
|
|
get_property(_cppcheckfiles GLOBAL PROPERTY _cppcheckfiles)
|
|
get_property(_cppcheckincludedirs GLOBAL PROPERTY _cppcheckincludedirs)
|
|
|
|
foreach(_target ${ARG_TARGETS})
|
|
get_target_property(_sources ${_target} SOURCES)
|
|
get_target_property(_source_dir ${_target} SOURCE_DIR)
|
|
get_target_property(_include_dir ${_target} INCLUDE_DIRECTORIES)
|
|
string(REPLACE "$<" ";" _include_dirs ${_include_dir})
|
|
|
|
foreach(_dir ${_include_dirs})
|
|
list(APPEND _cppcheckincludedirs -I${_include_dir})
|
|
endforeach()
|
|
|
|
foreach(_source ${_sources})
|
|
set(_fullsource "${_source_dir}/${_source}")
|
|
list(APPEND _cppcheckfiles ${_fullsource})
|
|
endforeach()
|
|
endforeach()
|
|
set_property(GLOBAL PROPERTY _cppcheckfiles ${_cppcheckfiles})
|
|
set_property(GLOBAL PROPERTY _cppcheckincludedirs ${_cppcheckincludedirs})
|
|
ENDIF()
|
|
ENDIF()
|
|
ENDFUNCTION()
|
|
|
|
FUNCTION(RESET_CPPCHECK)
|
|
set_property(GLOBAL PROPERTY _cppcheckfiles "")
|
|
set_property(GLOBAL PROPERTY _cppcheckincludedirs "")
|
|
ENDFUNCTION()
|
|
|
|
|
|
FUNCTION(GENERATE_CPPCHECK_TARGET)
|
|
IF ( NOT hasParent AND CPPCHECK)
|
|
message("generate cppcheck target")
|
|
get_property(_targetcppcheckfiles GLOBAL PROPERTY _cppcheckfiles)
|
|
get_property(_targetcppcheckincludedirs GLOBAL PROPERTY _cppcheckincludedirs)
|
|
|
|
add_custom_target(cppcheck
|
|
COMMAND
|
|
${CPPCHECK}
|
|
--xml
|
|
--xml-version=2
|
|
--enable=all
|
|
--inconclusive
|
|
--force
|
|
--inline-suppr
|
|
${_targetcppcheckincludedirs}
|
|
${_targetcppcheckfiles}
|
|
2> cppcheck.xml
|
|
WORKING_DIRECTORY
|
|
${CMAKE_CURRENT_BINARY_DIR}
|
|
COMMENT
|
|
"cppcheck: Running cppcheck on target ${_targetname}..."
|
|
VERBATIM)
|
|
|
|
ENDIF()
|
|
ENDFUNCTION()
|
|
|
|
ENDIF()
|