fix adoc change

This commit is contained in:
ttroy50
2015-11-22 00:11:23 +00:00
parent 56cc164d7b
commit 463caeabd0
2 changed files with 60 additions and 52 deletions

View File

@@ -16,9 +16,10 @@ Requirements
To run this example you must have the CppCheck utility installed. On
Ubuntu you can install it as
code,cmake------------------------------- code,cmake
[source,cmake]
----
$ sudo apt-get install cppcheck
-------------------------------
----
[[concepts]]
Concepts
@@ -36,23 +37,25 @@ The cmake/modules/FindCppCheck.cmake file contains the code to find and
add variables for a custom package module. Custom modules can be used to
find programs, libraries and header files to include in your program.
code,cmake----------------------------------------- code,cmake
[source,cmake]
----
find_program(CPPCHECK_BIN NAMES cppcheck)
-----------------------------------------
---
Search the path for the program "cppcheck" and store the result in the
CPPCHECK_BIN variable
code,cmake---------------------------------------------------------------------------------------------------------------------------------
code,cmake
[source,cmake]
----
set (CPPCHECK_THREADS "-j 4" CACHE STRING "The -j argument to have cppcheck use multiple threads / cores")
set (CPPCHECK_ARG "${CPPCHECK_THREADS}" CACHE STRING "The arguments to pass to cppcheck. If set will overwrite CPPCHECK_THREADS")
---------------------------------------------------------------------------------------------------------------------------------
---
Set some custom arguments that can be later passed to cppcheck.
code,cmake-------------------------------------- code,cmake
[source,cmake]
----
include(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(
CPPCHECK
@@ -65,7 +68,7 @@ mark_as_advanced(
CPPCHECK_BIN
CPPCHECK_THREADS
CPPCHECK_ARG)
--------------------------------------
---
Export the variables so that they can be seen from ccmake / cmake-gui
and set in the cache. By default these will not be visible unless the
@@ -75,20 +78,21 @@ view advanced flag is set.
Setting path to custom modules
++++++++++++++++++++++++++++++
code,cmake-------------------------------------------------------
code,cmake
[source,cmake]
----
set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules
${CMAKE_MODULE_PATH})
-------------------------------------------------------
---
The $\{CMAKE_MODULE_PATH} points towards a folder which contains custom
cmake modules.
To then add the package module you can call
code,cmake---------------------- code,cmake
[source,cmake]
----
find_package(CppCheck)
----------------------
---
[[parent-scope-variables]]
Parent Scope Variables
@@ -98,10 +102,10 @@ The scope of variables when they are declared / changed is typically in
the function of file the are called. To make a change to a variable
which is the caller of your scope, you should call it as follows:
code,cmake----------------------------------------------------------------
code,cmake
[source,cmake]
----
set(ALL_ANALYSIS_TARGETS "${ALL_ANALYSIS_TARGETS}" PARENT_SCOPE)
----------------------------------------------------------------
---
[[add_analysis-macro]]
add_analysis macro
@@ -112,57 +116,57 @@ example. If cppcheck is available then a list of arguments are compiled
and added to a custom command that calls cppcheck on the sources. These
are then added to a custom target.
code,cmake-------------------------------------------------------------------------------------
code,cmake
[source,cmake]
----
get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
foreach(dir ${dirs})
LIST(APPEND cppcheck_includes "-I${dir}")
endforeach()
-------------------------------------------------------------------------------------
---
Find the include files from and calls to include_directories() in the
same project.
code,cmake----------------------------------------------------------------
code,cmake
[source,cmake]
----
LIST(APPEND ALL_ANALYSIS_TARGETS "${_target}_analysis")
set(ALL_ANALYSIS_TARGETS "${ALL_ANALYSIS_TARGETS}" PARENT_SCOPE)
----------------------------------------------------------------
---
Export the target name into a variable that can later be used to add a
global "make analysis" target.
code,cmake-------------------------------------------------------------
code,cmake
[source,cmake]
----
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 ()
-------------------------------------------------------------
---
Change the CPPCHECK_ARG so that the can be added to command correctly in
the custom command.
code,cmake---------------------------------------------------------------------------
code,cmake
[source,cmake]
----
add_custom_target(${_target}_analysis)
set_target_properties(${_target}_analysis PROPERTIES EXCLUDE_FROM_ALL TRUE)
---------------------------------------------------------------------------
---
Add a custom target with a name you have passed in followed by
_analysis. Do not include this in the all target.
code,cmake-----------------------------------------------------------------------------------
code,cmake
[source,cmake]
----
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)
-----------------------------------------------------------------------------------
---
Add a custom command which is called from the custom target added above.
This will call cppcheck with any includes, arguments and sources that
@@ -173,10 +177,11 @@ of source files.
To call the add_analysis marco add the following to your projects
CMakeLists.txt file:
code,cmake------------------------------------------------- code,cmake
[source,cmake]
----
include(${CMAKE_SOURCE_DIR}/cmake/analysis.cmake)
add_analysis(${PROJECT_NAME} SOURCES)
-------------------------------------------------
---
[[creating-a-target-to-call-other-targets]]
Creating a target to call other targets
@@ -191,21 +196,22 @@ To achieve this 2 things should be added to the root CMakeLists.txt
First add an empty variable ALL_ANALYSIS_TARGETS before calling your
add_subdirectories() function.
code,cmake-------------------------- code,cmake
[source,cmake]
----
set (ALL_ANALYSIS_TARGETS)
--------------------------
---
Second add the following after your add_subdirectories() call.
code,cmake--------------------------------------------------------------------
code,cmake
[source,cmake]
----
if( CPPCHECK_FOUND )
add_custom_target(analysis)
ADD_DEPENDENCIES(analysis ${ALL_ANALYSIS_TARGETS})
set_target_properties(analysis PROPERTIES EXCLUDE_FROM_ALL TRUE)
message("analysis analysis targets are ${ALL_ANALYSIS_TARGETS}")
endif()
--------------------------------------------------------------------
---
This adds the "make analysis" target which calls all the sub-targets.
@@ -213,8 +219,8 @@ This adds the "make analysis" target which calls all the sub-targets.
Building the example
~~~~~~~~~~~~~~~~~~~~
code,bash------------------------------------------------------------------------------------------------------------
code,bash
[source,bash]
----
$ mkdir build
$ cd build/
@@ -250,18 +256,18 @@ Checking main2.cpp...
Built target subproject2_analysis
Scanning dependencies of target analysis
Built target analysis
------------------------------------------------------------------------------------------------------------
---
The above calls cppcheck in both subproject folders as
code,bash-----------------------------------------------------------
code,bash
[source,bash]
----
...
cd /path/to/subproject1 && /usr/bin/cppcheck -j 4 main1.cpp
...
cd /path/to/subproject2 && /usr/bin/cppcheck -j 4 main2.cpp
...
-----------------------------------------------------------
---
The main1.cpp has no errors so will complete correctly, however the
main2.cpp includes an out-of-bounds error which shows the error.
@@ -274,7 +280,8 @@ By default cppcheck only prints warnings and exits with a successful
exit code. If the $\{CPPCHECK_ARG} variable is set with
"--error-exitcode=1", the make analysis will finish early as follows.
------------------------------------------------------------------------------------
[source,bash]
----
$ make analysis
Running cppcheck: subproject2
Checking main2.cpp...
@@ -283,7 +290,7 @@ make[3]: *** [subproject2_analysis] Error 1
make[2]: *** [subproject2/CMakeFiles/subproject2_analysis.dir/all] Error 2
make[1]: *** [CMakeFiles/analysis.dir/rule] Error 2
make: *** [analysis] Error 2
------------------------------------------------------------------------------------
---
[[extra-notes]]
Extra Notes
@@ -308,7 +315,7 @@ sub folders, such as below:
You must add the following to the src/CMakeLists.txt file to correctly
generate the "make analysis" target
code,cmake--------------------------------------------------------
code,cmake
[source,cmake]
----
set(analysis_TARGETS "${analysis_TARGETS}" PARENT_SCOPE)
--------------------------------------------------------
---