ROS学习之CMakeList文件格式介绍

ROS中创建软件包所依赖的文件为CMakeList.txt,catkin_make会根据你写的CMakeList.txt来配置编译软件包。

CMakeList.txt文件主要包含以下内容:

所需CMake版本                cmake_minimum_required(VERSION 2.8.3)

软件包名称                        project()

查找构建此包所需的包      find_package()

消息/服务/动作生成器        add_message_files(),add_service_files(),add_action_files()

消息/服务/动作生成           generate_messages()

指定包构建的消息导出      catkin_package()

要建立的库/可执行文件     add_library()/ add_executable()/ target_link_libraries())target_link_libraryes通常情况下要有

1. 所需CMake版本

catkin_make的底层是使用cmake进行编译的,这里指定cmake的版本(最低版本)

 

2. 软件包名称

project(package_name)

在使用catkin_create_pkg创建包时,后面跟的参数(包名)就是此处的package_name

在CMakeList.txt后面的部分可以使用 ${PROJECT_NAME} 来使用此参数

3. 查找此包创建时所需要的其它包

可以将所依赖的包写成下面的形式:
find_package(catkin REQUIRED)
find_package(roscpp REQUIRED)
find_package(rospy REQUIRED)
find_package(std_msgs REQUIRED)

其中catkin是创建每个包所必须的依赖项,创建包时所依赖的其它项又可以将其组成catkin的组件,所以上面可以总写为:

find_package(catkin REQUIRED COMPONENTS
  roscpp
  rospy
  std_msgs
)

如果要使用 C++ 和 Boost,则需要引用 find_package 包含 Boost,并且指明 Boost 的类型,如使用 Boost threads,则:

find_package(Boost REQUIRED COMPONENTS thread)

4. add_message_files()

像message service 和action的定义需要在catkin_package()之前

## Generate messages in the 'msg' folder
# add_message_files(
#   FILES
#   Message1.msg
#   Message2.msg
# )
比如:
add_message_files(
  FILES Num1.msg Num2.msg
)

5. catkin_package()

用来向编译系统指明catkin-specific的信息,格式如下:
catkin_package(
   INCLUDE_DIRS include  # 此项打开之后该软件包的include文件可以被其它包所引用
   LIBRARIES ${PROJECT_NAME} #同理
   CATKIN_DEPENDS roscpp nodelet
   DEPENDS eigen opencv)

6. 包含文件目录

include_directories(include ${catkin_INCLUDE_DIRS})  

其中include是指包含本软件包下的头文件, ${catkin_INCLUDE_DIRS}是指ROS下其它包的头文件,include需要写在${catkin_INCLUDE_DIRS}前面。

7. 生成可执行文件

#其中talker为将要生成的二进制文件,在ros所有的包中必须是独一无二不能重复的,src/talker.cpp为需要编译的源文件
add_executable(talker src/talker.cpp)  
target_link_libraries(talker ${catkin_LIBRARIES}) 
生成的可执行文件会存放在./devel/lib/*pack_name*/下:
ROS学习之CMakeList文件格式介绍_第1张图片

 

 

你可能感兴趣的:(ROS,使用笔记,一步一步学CMake)