CMake/Examples: Difference between revisions
Daviddoria (talk | contribs) |
Daviddoria (talk | contribs) |
||
Line 102: | Line 102: | ||
=Linking to specific libraries= | =Linking to specific libraries= | ||
==ITK== | |||
Add the path to your environment: | |||
<source lang="cmake"> | |||
export ITK_DIR=/home/doriad/bin/ITK | |||
</source> | |||
<source lang="cmake"> | |||
FIND_PACKAGE(ITK REQUIRED) | |||
INCLUDE(${ITK_USE_FILE}) | |||
ADD_EXECUTABLE(CastImageFilter CastImageFilter.cxx) | |||
TARGET_LINK_LIBRARIES(CastImageFilter | |||
vtkHybrid | |||
ITKIO ITKBasicFilters ITKCommon | |||
) | |||
</source> | |||
==VXL== | ==VXL== | ||
Add the path to your environment: | Add the path to your environment: | ||
Line 116: | Line 133: | ||
Add the path to your environment: | Add the path to your environment: | ||
<source lang="cmake"> | <source lang="cmake"> | ||
export VTK_DIR="/home/doriad/bin | export VTK_DIR="/home/doriad/bin/VTK" | ||
</source> | </source> | ||
Revision as of 01:50, 22 January 2011
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
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) ...do something... ELSE(WIN32) ...do something else... ENDIF(WIN32)
</source>
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
<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>
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
ITK
Add the path to your environment: <source lang="cmake"> export ITK_DIR=/home/doriad/bin/ITK </source>
<source lang="cmake"> FIND_PACKAGE(ITK REQUIRED) INCLUDE(${ITK_USE_FILE})
ADD_EXECUTABLE(CastImageFilter CastImageFilter.cxx) TARGET_LINK_LIBRARIES(CastImageFilter vtkHybrid ITKIO ITKBasicFilters ITKCommon ) </source>
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/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>
OpenCV
Add to the environment: <source lang="text"> export OpenCV_DIR=/home/doriad/bin/OpenCV </source>
<source lang="cmake"> FIND_PACKAGE(OpenCV REQUIRED ) INCLUDE_DIRECTORIES( ${OPENCV_INCLUDE_DIR} )
ADD_EXECUTABLE(Scalar Scalar.cxx) TARGET_LINK_LIBRARIES(Scalar ${OpenCV_LIBS}) </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>