Difference between revisions of "CMake/Examples"
Daviddoria (talk | contribs) |
Daviddoria (talk | contribs) (→Bool) |
||
Line 105: | Line 105: | ||
SET(DAI_WITH_BP ON CACHE BOOL "Belief Propagation" FORCE) | SET(DAI_WITH_BP ON CACHE BOOL "Belief Propagation" FORCE) | ||
</source> | </source> | ||
===Comparison=== | |||
if(DAI_WITH_BP EQUALS ON) | |||
#do something | |||
endif(DAI_WITH_BP EQUALS ON) | |||
=Linking to specific libraries= | =Linking to specific libraries= |
Revision as of 16:10, 15 March 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
SET(VARIABLE VALUE)
View a CMake variable
MESSAGE("CMAKE_BINARY_DIR: ${CMAKE_BINARY_DIR}")
View a system variable
\verb|MESSAGE("$ENV{PATH}")
Check operating system
IF(WIN32)
...do something...
ELSE(WIN32)
...do something else...
ENDIF(WIN32)
Fix Mininum Version Error/Warning
cmake_minimum_required(VERSION 2.6.0 FATAL_ERROR)
Look in the directory that the CMakeLists.txt file is for header and implementation files
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR})
Set Link Directories
LINK_DIRECTORIES(${LINK_DIRECTORIES} /usr/local/lib)
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.
INCLUDE_DIRECTORIES(/some/directory)
View the directories that are set
get_property(inc_dirs DIRECTORY PROPERTY INCLUDE_DIRECTORIES)
message("inc_dirs = ${inc_dirs}")
Automate configure and generate
Note 'cmake' instead of 'ccmake' (ccmake is curses cmake (curses is the terminal gui))
cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=/usr/mylocation ../
Compiler options
Set a cmake flag
ccmake ../../src/boost -DCMAKE_IS_EXPERIMENTAL=YES_I_KNOW
Set a cpp flag
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__WXGTK__")
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:
set(MySources main.c anotherFile.c)
add_executable(SpinRecognize ${MySource})
set_source_files_properties(${MySources} PROPERTIES LANGUAGE CXX)
Per-target
set_target_properties(myexe_target
PROPERTIES COMPILE_FLAGS "-Wall")
Set the default build type
SET(CMAKE_BUILD_TYPE Debug CACHE STRING "default to debug" FORCE)
Custom variable
String
SET(BUILD_PARAVIEW_PLUGIN ON CACHE STRING "Build Paraview plugin?" FORCE)
Bool
SET(DAI_WITH_BP ON CACHE BOOL "Belief Propagation" FORCE)
Comparison
if(DAI_WITH_BP EQUALS ON)
- do something
endif(DAI_WITH_BP EQUALS ON)
Linking to specific libraries
ITK
Add the path to your environment:
export ITK_DIR=/home/doriad/bin/ITK
Then in the CMakeLists.txt use:
FIND_PACKAGE(ITK REQUIRED)
INCLUDE(${ITK_USE_FILE})
ADD_EXECUTABLE(CastImageFilter CastImageFilter.cxx)
TARGET_LINK_LIBRARIES(CastImageFilter
vtkHybrid
ITKIO ITKBasicFilters ITKCommon
)
VXL
Add the path to your environment:
export VXLBIN="/home/doriad/bin/vxl"
Then in the CMakeLists.txt use:
FIND_PACKAGE(VXL REQUIRED)
INCLUDE(${VXL_CMAKE_DIR}/UseVXL.cmake)
VTK
Add the path to your environment:
export VTK_DIR="/home/doriad/bin/VTK"
Then in the CMakeLists.txt use:
FIND_PACKAGE(VTK REQUIRED)
INCLUDE(${VTK_USE_FILE})
Boost
Add to the environment:
export BOOST_ROOT="/home/doriad/src/boost"
export BOOST_LIBRARYDIR="/home/doriad/bin/boost/lib"
Then in the CMakeLists.txt use:
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})
OpenCV
Add to the environment:
export OpenCV_DIR=/home/doriad/bin/OpenCV
Then in the CMakeLists.txt use:
FIND_PACKAGE(OpenCV REQUIRED )
INCLUDE_DIRECTORIES( ${OPENCV_INCLUDE_DIR} )
ADD_EXECUTABLE(Scalar Scalar.cxx)
TARGET_LINK_LIBRARIES(Scalar ${OpenCV_LIBS})
Get Help Using a Library
cmake --help-module FindBoost
Add new libraries to CMake
/usr/share/cmake/Modules/FindOpenGL.cmake|
Dependency Graph
ccmake ../src/Program/ --graphviz=test.graph
dotty test.graph
CTest
Run a specific test by number
e.g. Test 622
ctest -I 622,622
Run a range of tests
e.g. Test 622 to 625
ctest -I 622,625
Run a test by name
ctest -R "itkTransformPoint*"|
Link to a library
ADD_EXECUTABLE(ColoredLines ColoredLines.cpp)
TARGET_LINK_LIBRARIES(ColoredLines vtkHybrid)
Create a library
add_library(MatlabLibrary ./MatlabDll/LidarK.cpp)