CMakeList.txt
catkin基于CMake实现,CMakeList的语句与基本CMake一致,常用的包括:
- cmake_minimum_required():CMake版本
cmake_minimum_required(VERSION 2.8.3)
- 1
- project():工程名
project(your_package)
- 1
- find_package():加载外部变量
# 加载catkin中的变量,同时添加angles、roscpp、std_msgs的依赖
find_package(catkin REQUIRED COMPONENTS angles roscpp std_msgs)
# 加载Boost中的变量
find_package(Boost REQUIRED COMPONENTS thread)
- 1
- 2
- 3
- 4
- include_directories():添加头文件路径
# 添加./include、${catkin_INCLUDE_DIRS}为头文件路径,如果有其它外部路径也在这里添加
include_directories(include ${catkin_INCLUDE_DIRS})
# Boost_INCLUDE_DIRS环境变量在上面find_package中加载
include_directories(${Boost_INCLUDE_DIRS})
- 1
- 2
- 3
- 4
- add_library():生成库
# 生成库文件,可传入多个源文件
add_library(your_library
libsrc1.cpp
libsrc2.cpp
libsrc_etc.cpp
)
- 1
- 2
- 3
- 4
- 5
- 6
- add_executable():生成可执行文件
# 生成可执行文件,可以传入多个源文件
add_executable(my_node
src0.cpp
src1.cpp
src2.cpp
)
- 1
- 2
- 3
- 4
- 5
- 6
- add_dependencies():添加依赖项,在使用ROS的message、service、action时注意添加,如下:
# 添加对其它package消息的依赖,前提是已经通过find_package()引入了这个package
add_dependencies(my_target ${catkin_EXPORTED_TARGETS})
# 添加对本package消息的依赖
add_dependencies(my_target ${${PROJECT_NAME}_EXPORTED_TARGETS})
- 1
- 2
- 3
- 4
- target_link_libraries():链接库
# 为可执行文件或库添加链接库
target_link_libraries(my_node
${catkin_LIBRARIES} # ROS基本库
${Boost_LIBRARIES} # Boost库
)
- 1
- 2
- 3
- 4
- 5
- install():安装
# 默认情况catkin会为每个package在./devel中建立目录,存放目标文件
# 目标文件可以直接通过rosrun和roslaunch访问
# 如需制定其它安装位置,则需通过install()命令
install(TARGETS my_node0 my_node1
ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
以上语句功能不详细叙述。
除此之外,catkin还为ROS设计了一些独有语句,包括:
- add_message_files(), add_service_files(), add_action_files()
用于添加自定义的message、service和action文件。基本语法为:
# 以message为例,service、action类似
add_message_files(
# 目录名
DIRECTORY msg
# 文件名
FILES YourFirstMessage.msg YourSecondMessage.msg YourThirdMessage.msg
)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- generate_messages()
用于生成所有定义的message、service、action文件,需要添加本文件需要依赖的message文件包。
一般情况下需要依赖std_msgs,如果用到了其它类型的msg,也要在这声明。如下:
generate_messages(DEPENDENCIES std_msgs)
- 1
catkin_package()
catkin_package()是catkin提供的CMake宏,用于为catkin提供构建、生成pkg-config和CMake文件所需要的信息。
必须在声明add_library()或add_executable()前调用
有5个可选参数:- INCLUDE_DIRS - 声明给其它package的include路径
- LIBRARIES - 声明给其它package的库
- CATKIN_DEPENDS - 本包依赖的catkin package
- DEPENDS - 本包依赖的非catkin package
- CFG_EXTRAS - 其它配置参数
比如:
catkin_package(
INCLUDE_DIRS include
LIBRARIES ${PROJECT_NAME}
CATKIN_DEPENDS roscpp nodelet
DEPENDS eigen opencv)
- 1
- 2
- 3
- 4
- 5
- catkin_add_gtest(), catkin_add_nosetests(), add_rostest(), add_rostest_gtest()