[[PageOutline]] Various cmake modules are used by the flair build system. They are located in [source:flair-dev/trunk/cmake-modules flair-dev]. You will find some explanations of what they do here. But the best way to understand them is to read them! = Cmake modules = == [source:flair-dev/trunk/cmake-modules/ArchDir.cmake ArchDir.cmake] == Retrieves the arch name from the toolchain file (''toolchain.cmake''). It is used to install files in the correct folders, and to check if a lib, demo or tool is compatible with a specific architecture or not. It also checks if host architecture is i686, as it is not supported. == [source:flair-dev/trunk/cmake-modules/ColoredMessage.cmake ColoredMessage.cmake] == Defines some cmake functions to have colored messages. == [source:flair-dev/trunk/cmake-modules/FindXenomai.cmake FindXenomai.cmake] == Find xenomai lib and defines some variables useful for cmake. == [source:flair-dev/trunk/cmake-modules/GlobalCmakeFlair.cmake GlobalCmakeFlair.cmake] == reimplements some cmake built in functions to add extra functionalities * ''ADD_EXECUTABLE'': * add a message to display architecture * check if $HOME/.ssh/config have some hosts defined (see [wiki:setup#ConfigureSSHhostsoptional here]). In this case add a custom_target to cmake, to copy the executable with ssh. The custom target is called ''delivery_root_ADDRESS_PATH'', with address the target address and path the destination path. * copy demos binaries. To enable this functionality, you need to add ''SET(FLAIR_DEMO_DEST_DIR yourproject)'' to your ''CMakeLists.txt'', see this [source:flair-src/trunk/demos/CircleFollower/uav/CMakeLists.txt example]. Files will be copied to ''$FLAIR_ROOT/flair-install/bin/demos/${ARCH_DIR}/yourproject'' * ''ADD_LIBRARY'': * add a message to display architecture. * add compile info in a .h (used by libs constructor), see [source:flair-src/trunk/lib/FlairMeta/src/UavFactory.cpp in FlairMeta] for example. * ''INSTALL'': * copy resources files (scripts and xml files for the demos). Resources files are placed in the ''resources'' dir, and inside an arch dir. See for example in the [source:flair-src/trunk/demos/CircleFollower/uav/resources CircleFollower demo]. These files are not overwritten if they already exist. To enable this functionality, you need to add ''SET(FLAIR_RESOURCE_FILES_DEST_DIR yourproject)'' to your ''CMakeLists.txt'', see this [source:flair-src/trunk/demos/CircleFollower/uav/CMakeLists.txt example]. Files will be copied to ''$FLAIR_ROOT/flair-install/bin/demos/${ARCH_DIR}/yourproject'' == [source:flair-dev/trunk/cmake-modules/FlairUseFile.cmake FlairUseFile.cmake] == Used by demos/tools, it helps adding include dirs and libraries for programs using flair. It performs some checks: * presence of libxml2 in the toolchain * presence of xenomai in the toolchain * gcc version (must be >= 4.3) * presence of a flair-hds directory. For Heudiasyc users, see [wiki:hds_users here] Needed include dirs and libraries are determined using some boolean variables: * ''FLAIR_USE_SIMULATOR'' * ''FLAIR_USE_VRPN'' * ''FLAIR_USE_GPS'' * ''FLAIR_USE_VISION_FILTER'' * ''FLAIR_USE_SENSOR_ACTUATOR'' * ''FLAIR_USE_FILTER'' * ''FLAIR_USE_META'' You have to set these variables to true in your ''CMakeLists.txt'', if you need need these functionalities. In return, ''!FlairUseFile.cmake'' will fill 3 variables: * ''${FLAIR_INCLUDE_DIR}'': list of needed include dirs * ''${FLAIR_LIBRARIES_RT}'': list of needed libraries for real time (xenomai) * ''${FLAIR_LIBRARIES_NRT}'': list of needed libraries for non real time Take a look at !CircleFollower demo [source:flair-src/trunk/demos/CircleFollower/uav/CMakeLists.txt CMakeLists.txt] file to see how it is used.