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()