CMakeLists.txt文件详解

为了了解catkin_make编译的原理,以及动手写编译节点功能包,特地把CMakeLists.txt文件翻译一下:

 

 

cmake_minimum_required(VERSION 2.8.3)
project(my_pkg)

##找到catkin编译的宏命令和库文件,如果像find_package(catkin REQUIRED COMPONENTS xyz)一样的清单被使用的话,也能找到其他catkin编译的功能包
find_package(catkin REQUIRED COMPONENTS
message_generation
rospy
)

## 系统依赖项也能随着CMake的规定被找到
# find_package(Boost REQUIRED COMPONENTS system)

## 如果功能包里有一个setup.py,取消这些注释。这个宏可以确保模块和全局脚本声明在其中得到安装
##参考http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html
# catkin_python_setup()

################################################
##声明 ROS 的 messages, services 和 actions##
#service 是同步的通信机制,a 和 b 间通过 sevice 机制通信,假设 a 是客户端访问 b 服务器端,a 远
#程调用 b 上的某个函数,a 程序得等 b 服务器响应后才能作其他的事情(运行其他程序),如果 b 服务器长
#期无响应,那么 a 啥也别做了,一直等下去吧,无法取消。显然效率低下,原因在于 service 时同步通信
#机制。
#ros 提供了另外一种通信机制 action,可以在远程调用服务器上某程序后,转而执行其他的程序,周期性的获得服务器上的信息,或者取消发送到服务器上的某远程调用,机制灵活,异步通信。
################################################
## 想要在功能包中声明和建立习messages, services和actions,就遵循以下步骤:
#(1)用MSG_DEP_SET对功能包进行相应设置,且功能包的消息类型就是你的messages/services/actions (e.g. std_msgs, actionlib_msgs, ...).
#(2)*在package.xml文件中:给"message_generation"增加一个build_depend标签,在MSG_DEP_SET里给功能包增加一个build_depend和一个run_depend标签;
#如果MSG_DEP_SET不是空的,接下来的依赖就已经被设置了,但是仍然可以做确定性说明:给"message_runtime"增加一个run_depend标签。
#(3)在CMakeLists.txt文件中:增加"message_generation",而且在每一个功能包里,要对find_package(catkin REQUIRED COMPONENTS ...)进行MSG_DEP_SET设置;
#增加"message_runtime",而且在每一个功能包里,要对catkin_package(CATKIN_DEPENDS ...)进行MSG_DEP_SET设置。
#(4)以下add_*_files部分,和下列.msg/.srv/.action文件,每一个都根据需要可以取消注释:
#在generate_messages的入口取消注释;
#在MSG_DEP_SET的功能包增加generate_messages(DEPENDENCIES ...)。

##在'msg'路径收集messages
# add_message_files(
# FILES
# Message1.msg
# Message2.msg# )

##在'srv'路径收集service
# add_service_files(
# FILES
# Service1.srv
# Service2.srv
# )

##在'action'路径收集action
# add_action_files(
# FILES
# Action1.action
# Action2.action
# )

##在这里列出的依赖项下,收集增加的messages和services
# generate_messages(
# DEPENDENCIES
# std_msgs #或者其他功能包包含的msgs
# )

################################################
##声明ROS动态配置参数##
################################################
##要在这个功能包里声明和建立动态配置参数,遵循下列步骤:
#(1)在package.xml文件中:给"dynamic_reconfigure"增加一个build_depend和一个run_depend标签。
#(2)在CMakeLists.txt文件中:在下面的find_package(catkin REQUIRED COMPONENTS ...)里增加"dynamic_reconfigure"。
#(3)取消下面"generate_dynamic_reconfigure_options"部分的注释,而且下面每一个.cfg文件都会被处理。

##在'cfg'路径收集动态配置参数
# generate_dynamic_reconfigure_options(
# cfg/DynReconf1.cfg
# cfg/DynReconf2.cfg
# )

###################################
## catkin特殊配置##
###################################
## catkin_package宏为你的功能包生成cmake配置文件,声明的参数要给依赖工程文件
## INCLUDE_DIRS:如果你的功能包有头文件,就取消它的注释
## LIBRARIES: 在这个项目中生成库,还需要依赖项目
## CATKIN_DEPENDS: catkin_packages依赖工程也需要
## DEPENDS: 系统依赖关系的这个项目也需要依赖项目
catkin_package(
# INCLUDE_DIRS include
# LIBRARIES my_pkg# CATKIN_DEPENDS message_generation rospy
# DEPENDS system_lib
)

###########
##编译##
###########
##指定额外的头文件的位置,你的包的位置应该是其他地方之前列出
# include_directories(include)
include_directories(
${catkin_INCLUDE_DIRS}
)

##声明一个C++库
# add_library(my_pkg
# src/${PROJECT_NAME}/my_pkg.cpp
# )

##给库增加cmake目标依赖,作为一个例子,在库之前生成代码或者从message生成,动态配置中生成
# add_dependencies(my_pkg ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})

##声明一个C++可执行
# add_executable(my_pkg_node src/my_pkg_node.cpp)

##给可执行增加cmake目标依赖,对上述提到的库也是一样的操作
# add_dependencies(my_pkg_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})

##指定链接库库或可执行的目标
# target_link_libraries(my_pkg_node
# ${catkin_LIBRARIES}
# )

#############
##安装##
#############
#所有安装目标有应该使用catkin DESTINATION变量
#参考http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html
##为安装标记可执行脚本Python etc.对比于setup.py,你要选择下面的
# install(PROGRAMS
# scripts/my_python_script
# DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
# )

##为安装标记可执行文件和/或库文件
# install(TARGETS my_pkg my_pkg_node
# ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
# LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
# RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
# )

##为安装标记cpp头文件
# install(DIRECTORY include/${PROJECT_NAME}/
# DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}# FILES_MATCHING PATTERN "*.h"
# PATTERN ".svn" EXCLUDE
# )

##为安装标记其他文件(e.g. launch and bag files, etc.)
# install(FILES
# # myfile1
# # myfile2
# DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
# )

#############
##测试##
#############
##给cpp测试目标和链接库增加gtest
# catkin_add_gtest(${PROJECT_NAME}-test test/test_my_pkg.cpp)
# if(TARGET ${PROJECT_NAME}-test)
# target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME})
# endif()

##在Python节点测试上增加文件
# catkin_add_nosetests(test)

 

你可能感兴趣的:(ROS)