From KitwarePublic
Jump to navigationJump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Welcome to the CMake Wiki Examples! These short snippets which show you how to perform many common CMake procedures. Please see [1] for the verbose documentation.

Please add examples as you find common procedures which are not explained here!


Set a CMake variable

<source lang="cmake"> SET(VARIABLE VALUE) </source>

View a CMake variable

<source lang="cmake"> MESSAGE("CMAKE_BINARY_DIR: ${CMAKE_BINARY_DIR}") </source>

View a system variable

<source lang="cmake"> \verb|MESSAGE("$ENV{PATH}") </source>

Check operating system

<source lang="cmake">

IF(WIN32) something...
ELSE(WIN32) something else...


Fix Mininum Version Error/Warning

<source lang="cmake"> cmake_minimum_required(VERSION 2.6.0 FATAL_ERROR) </source>

Look in the directory that the CMakeLists.txt file is for header and implementation files

<source lang="cmake"> INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}) </source>

Set Link Directories

<source lang="cmake"> LINK_DIRECTORIES(${LINK_DIRECTORIES} /usr/local/lib) </source>

Set Include Directories

This command adds a path to the include directories, you do NOT have to do the 'export' style ``keep everything that is here and add this one syntax. <source lang="cmake"> INCLUDE_DIRECTORIES(/some/directory) </source>

View the directories that are set

<source lang="cmake"> get_property(inc_dirs DIRECTORY PROPERTY INCLUDE_DIRECTORIES) message("inc_dirs = ${inc_dirs}") </source>

Automate configure and generate

Note 'cmake' instead of 'ccmake' (ccmake is curses cmake (curses is the terminal gui)) <source lang="cmake"> cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=/usr/mylocation ../ </source>

Compiler options

Set a cmake flag

<source lang="cmake"> ccmake ../../src/boost -DCMAKE_IS_EXPERIMENTAL=YES_I_KNOW </source>

Set a cpp flag

\subsection{Global} <source lang="cmake"> SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__WXGTK__") </source>

Force g++

Ocassionally you will come across files with the extension .c that actually contain c++ code. CMake treats the file based on its extension. If you want to override this behavior (in this case, compile .c files with your c++ compiler), do the following:

<source lang="cmake"> set(MySources main.c anotherFile.c) add_executable(SpinRecognize ${MySource}) set_source_files_properties(${MySources} PROPERTIES LANGUAGE CXX) </source>


<source lang="cmake"> set_target_properties(myexe_target

                               PROPERTIES COMPILE_FLAGS "-Wall") 


Set the default build type

<source lang="cmake"> SET(CMAKE_BUILD_TYPE Debug CACHE STRING "default to debug" FORCE) </source>

Custom variable

<source lang="cmake"> SET(BUILD_PARAVIEW_PLUGIN ON CACHE STRING "Build Paraview plugin?" FORCE) </source>

Linking to specific libraries


Add the path to your environment: <source lang="cmake"> export VXLBIN="/home/doriad/bin/vxl" </source>

<source lang="cmake"> FIND_PACKAGE(VXL REQUIRED) INCLUDE(${VXL_CMAKE_DIR}/UseVXL.cmake) </source>


Add the path to your environment: <source lang="cmake"> export VTK_DIR="/home/doriad/bin/ParaView3/VTK" </source>

<source lang="cmake"> FIND_PACKAGE(VTK REQUIRED) INCLUDE(${VTK_USE_FILE}) </source>


Add to the environment: <source lang="cmake"> export BOOST_ROOT="/home/doriad/src/boost" export BOOST_LIBRARYDIR="/home/doriad/bin/boost/lib" </source>


Get Help Using a Library

<source lang="cmake"> cmake --help-module FindBoost </source>

Add new libraries to CMake

<source lang="cmake"> /usr/share/cmake/Modules/FindOpenGL.cmake| </source>

Dependency Graph

<source lang="cmake"> ccmake ../src/Program/ --graphviz=test.graph dotty test.graph </source>


Run a specific test by number

e.g. Test 622 <source lang="cmake"> ctest -I 622,622 </source>

Run a range of tests

e.g. Test 622 to 625 <source lang="cmake"> ctest -I 622,625 </source>

Run a test by name

<source lang="cmake"> ctest -R "itkTransformPoint*"| </source>

Link to a library

<source lang="cmake"> ADD_EXECUTABLE(ColoredLines ColoredLines.cpp) TARGET_LINK_LIBRARIES(ColoredLines vtkHybrid) </source>

Create a library

<source lang="cmake"> add_library(MatlabLibrary ./MatlabDll/LidarK.cpp) </source>