通过学习KDL开源项目的代码可以学习CMake构建程序的知识,现简单介绍一下orocos_kinematics_dynamics-master\orocos_kinematics_dynamics-master\orocos_kdl\examples\CMakeList.txt文件的指令。
IF(ENABLE_EXAMPLES)
INCLUDE_DIRECTORIES(${PROJ_SOURCE_DIR}/src ${PROJ_SOURCE_DIR}/models ${PROJ_BINARY_DIR}/src)
add_executable(geometry geometry.cpp )
TARGET_LINK_LIBRARIES(geometry orocos-kdl)
add_executable(trajectory_example trajectory_example.cpp )
TARGET_LINK_LIBRARIES(trajectory_example orocos-kdl)
add_executable(chainiksolverpos_lma_demo chainiksolverpos_lma_demo.cpp )
TARGET_LINK_LIBRARIES(chainiksolverpos_lma_demo orocos-kdl orocos-kdl-models)
ENDIF(ENABLE_EXAMPLES)
逐句解读:
IF(ENABLE_EXAMPLES)
判断是表达式ENABLE_EXAMPLES是否为ON,默认是OFF,要想该更改值需要在orocos_kdl/CMakeList.txt文件中将OPTION(ENABLE_EXAMPLES OFF “Enablebuilding of examples”)行中的OFF改成ON。
INCLUDE_DIRECTORIES(${PROJ_SOURCE_DIR}/src${PROJ_SOURCE_DIR}/models ${PROJ_BINARY_DIR}/src)
为构建树添加包含路径,如果没有这一句,那么在make以后,会显示chainiksolverpos_lma_demo.cpp中的第一句include “frame_io.hpp”编译无法通过,因为没有指定frame_io.hpp的路径。
add_executable(geometrygeometry.cpp )
TARGET_LINK_LIBRARIES(geometryorocos-kdl)
将源文件生成一个可执行文件,将静态链接库orocos-kdl连接到目标geometry上,如果没有target_link_libraries,那么src中的源文件的函数就不能被调用。
add_executable(trajectory_exampletrajectory_example.cpp )
TARGET_LINK_LIBRARIES(trajectory_exampleorocos-kdl)
add_executable(chainiksolverpos_lma_demochainiksolverpos_lma_demo.cpp )
TARGET_LINK_LIBRARIES(chainiksolverpos_lma_demoorocos-kdl orocos-kdl-models)
这四行同理。
ENDIF(ENABLE_EXAMPLES)
第一行IF的结束语句。