cmake_minimum_required(VERSION 3.0.2) ##CMake的版本
project(learning_communication) ##该功能包的名称
find_package(
catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
message_generation
actionlib_msgs
actionlib
) ##此功能包需要依赖的其他功能包
add_message_files(FILES Person.msg) ##创建消息文件FILES Person.msg
add_service_files(FILES AddTwoInts.srv) ##创建服务文件FILES AddTwoInts.srv
add_action_files(DIRECTORY action FILES DoDishes.action) ##创建动作文件DIRECTORY action FILES DoDishes.action
generate_messages(DEPENDENCIES std_msgs actionlib_msgs) ##这句必须和add_message_files一句一起使用才能定义消息,且这句话要放在创建消息/服务/动作等语句之后
add_executable(talker src/talker.cpp) ##以src/talker.cpp生成名为taker的可执行文件
target_link_libraries(talker ${catkin_LIBRARIES}) ##通过此命令把可执行文件与其他库做一个链接
add_executable(server src/server.cpp) ##以src/server.cpp生成名为server的可执行文件
target_link_libraries(server ${catkin_LIBRARIES}) ##通过此命令把可执行文件与其他库做一个链接
add_dependencies(server ${PROJECT_NAME}_gencpp) ##添加这条语句就是提醒编译器需要先生成server的依赖(catkin_LIBRARIES),然后再去生成main
catkin_package(
# INCLUDE_DIRS include
# LIBRARIES learning_communication
CATKIN_DEPENDS roscpp rospy std_msgs message_runtime
# DEPENDS system_lib
) ##catkin_package()是catkin提供的CMake宏,用于为catkin提供构建、生成pkg-config和CMake文件所需要的信息。
有五个参数可选:
INCLUDE_DIRS - 声明给其它package的include路径
LIBRARIES - 声明给其它package的库
CATKIN_DEPENDS - 本包依赖的catkin package
DEPENDS - 本包依赖的非catkin package
CFG_EXTRAS - 其它配置参数
find_package 是针对当前包的,寻找当前包需要依赖的库;catkin_package()是针对依赖当前包的包,声明一些库,这些库是当前包依赖的库,也是依赖当前包的包所依赖的库。这样,在catkin依赖当前包的包时,就不用显示的find_package()这些库了