以下是创建并编译一个新的package后生成的CMakeLists.txt文件内容。
- cmake_minimum_required(VERSION 2.8.3)
- project(chloe)
- ## Find catkin macros and libraries
- ## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
- ## is used, also find other catkin packages
- find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs)
- ## System dependencies are found with CMake's conventions
- # find_package(Boost REQUIRED COMPONENTS system)
- ## Uncomment this if the package has a setup.py. This macro ensures
- ## modules and scripts declared therein get installed
- # catkin_python_setup()
- #######################################
- ## Declare ROS messages and services ##
- #######################################
- ## Generate messages in the 'msg' folder
- # add_message_files(
- # FILES
- # Message1.msg
- # Message2.msg
- # )
- ## Generate services in the 'srv' folder
- # add_service_files(
- # FILES
- # Service1.srv
- # Service2.srv
- # )
- ## Generate added messages and services with any dependencies listed here
- # generate_messages(
- # DEPENDENCIES
- # std_msgs
- # )
- ###################################################
- ## Declare things to be passed to other projects ##
- ###################################################
- ## LIBRARIES: libraries you create in this project that dependent projects also need
- ## CATKIN_DEPENDS: catkin_packages dependent projects also need
- ## DEPENDS: system dependencies of this project that dependent projects also need
- catkin_package(
- INCLUDE_DIRS include
- # LIBRARIES chloe
- # CATKIN_DEPENDS roscpp rospy std_msgs
- # DEPENDS system_lib
- )
- ###########
- ## Build ##
- ###########
- ## Specify additional locations of header files
- include_directories(include
- ${catkin_INCLUDE_DIRS}
- )
- ## Declare a cpp library
- # add_library(chloe
- # src/${PROJECT_NAME}/chloe.cpp
- # )
- ## Declare a cpp executable
- # add_executable(chloe_node src/chloe_node.cpp)
- ## Add dependencies to the executable
- # add_dependencies(chloe_node ${PROJECT_NAME})
- ## Specify libraries to link a library or executable target against
- # target_link_libraries(chloe_node
- # ${catkin_LIBRARIES}
- # )
- #############
- ## Install ##
- #############
- ## Mark executable scripts (Python etc.) for installation
- ## not required for python when using catkin_python_setup()
- # install(PROGRAMS
- # scripts/my_python_script
- # DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
- # )
- ## Mark executables and/or libraries for installation
- # install(TARGETS chloe chloe_node
- # ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
- # LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
- # RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
- # )
- ## Mark cpp header files for installation
- # install(DIRECTORY include/${PROJECT_NAME}/
- # DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
- # FILES_MATCHING PATTERN "*.h"
- # PATTERN ".svn" EXCLUDE
- # )
- ## Mark other files for installation (e.g. launch and bag files, etc.)
- # install(FILES
- # # myfile1
- # # myfile2
- # DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
- # )
- #############
- ## Testing ##
- #############
- ## Add gtest based cpp test target and link libraries
- # catkin_add_gtest(${PROJECT_NAME}-test test/test_chloe.cpp)
- # if(TARGET ${PROJECT_NAME}-test)
- # target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME})
- # endif()
- ## Add folders to be run by python nosetests
- # catkin_add_nosetests(test)
例如:进入自己的workspace的package下的msg文件夹,利用gedit编辑msg文件。命令如下:
- cd ~/wry_ws/src/chloe/msg
- gedit Num.msg
- string first_name
- string last_name
配置步骤如下:
首先查看Chloe功能包中的package.xml文件中是否包含以下两行,若没有,就加上:
- <build_depend>message_generation</build_depend>
- <run_depend>message_runtime</run_depend>
- #find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs)
- find_package(catkin REQUIRED COMPONENTS
- roscpp
- rospy
- std_msgs
- message_generation
- )
- # add_message_files(
- # FILES
- # Message1.msg
- # Message2.msg
- # )
- Message1.msg
- add_message_files(
- FILES
- Num.msg
- )
- # add_service_files(
- # FILES
- # Service1.srv
- # Service2.srv
- # )
- # Service1.srv
- # Service2.srv
下面修改:
- # generate_messages(
- # DEPENDENCIES
- # std_msgs
- # )
需要将其注释去掉,改为:
- generate_messages(
- DEPENDENCIES
- std_msgs
- )
- catkin_package(
- INCLUDE_DIRS include
- # LIBRARIES chloe
- # CATKIN_DEPENDS roscpp rospy std_msgs
- # DEPENDS system_lib
- )
这里,需要添加message_runtime,并且依赖其他的package,改为:
- catkin_package(
- INCLUDE_DIRS include
- LIBRARIES chloe
- CATKIN_DEPENDS message_runtime
- roscpp
- rospy
- std_msgs
- DEPENDS system_lib
- )
到此,文件中需要配置和更改就完成了。由于重新配置了CMakeLists.txt文件,因此需要对workspace尽心编译。
需要注意的是:find_package(...)
add_message_files(...)
add_service_files(...)
generate_message(...)
catkin_package(...)
这几项的先后顺序不能发生变化。
下面利用rosmsg show filename.ms和rossrv show filename.srv文件就可以查看其中的内容。
注意:所有在msg文件夹下的.msg文件都将转换为ROS所支持的语言的源文件。生成的C++头文件将会放置在~/wry_ws/devel/include/chloe/。Python脚本语言在~/wry_ws/devel/lib/python2.7/dist-package/chloe/下。