CMake/Examples

From KitwarePublic
< CMake
Revision as of 13:36, 17 November 2010 by Daviddoria (talk | contribs)
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!

Basics

Check operating system

<source lang="cmake">

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

</source>


View PATH

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

View a variable

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


Set a variable

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


Fix Mininum Version Error

<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++

<source lang="cmake">

set(SPIN_SRCS main.c analyze.c  ../spinImage/dhFaceSpinImage.c ../spinImage/faceSpinImage.c ../spinImage/normalizedSpinImage.c ../spinImage/spinImage.c ../spinImage/spinImageHashed.c ../spinImage/vectorArray.c)

add_executable(SpinRecognize ${SPIN_SRCS}) set_source_files_properties(${SPIN_SRCS} PROPERTIES LANGUAGE CXX) </source>


Per-target

<source lang="cmake"> set_target_properties(myexe_target

                               PROPERTIES COMPILE_FLAGS "-Wall") 

</source>

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

VXL

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>

VTK

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>

Boost

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

<source lang="cmake"> SET(Boost_USE_MULTITHREAD ON) #set a flag FIND_PACKAGE(Boost 1.34.1 COMPONENTS date_time filesystem) INCLUDE_DIRECTORIES(${INCLUDE_DIRECTORIES} ${Boost_INCLUDE_DIRS}) LINK_DIRECTORIES(${LINK_DIRECTORIES} ${Boost_LIBRARY_DIRS}) </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>

CTest

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>