前言;
编译配置主要有宏设置、包依赖、Cmake编译管理、catkin编译策略等。
宏设置
包依赖package.xml文件
编译管理CMakeList.txt文件
catkin编译策略:catkin编译策略主要指编译目标是Release、Debug、编译输出空间等。
宏设置:
目标路径 set(CATKIN_GLOBAL_LIB_DESTINATION lib)
编译要求:
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
包依赖package.xml文件:
配置程序包的编译、执行、测试依赖以及插件、程序包集等
build_depend描述了程序包的编译依赖
exec_depend描述了程序包的执行依赖等
test_depend描述了进行单元测试的依赖项
export标签描述了额外添加的信息如插件、程序包集
特定依赖:
# 消息生成
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
# 单元测试
<build_depend>rostest</build_depend>
# 消息
<build_depend>sensor_msgs</build_depend>
<build_depend>geometry_msgs</build_depend>
# 插件
<export>
<nodelet plugin="${prefix}/nodelet_description.xml"/>
</export>
# 程序包集
<export>
<metapackage />
</export>
程序包依赖配置:
配置第三方软件、程序包、消息、头文件等依赖。
当前包的依赖包 find_package()
依赖当前包的声明 catkin_package()
生成消息、服务所需的依赖 generate_messages()
Python脚本需要 catkin_python_setup()
find_package(catkin REQUIRED COMPONENTSactionlib_msgs message_generation roscpp std_msgs)
#找依赖
catkin_package( INCLUDE_DIRS include
LIBRARIES actionlib
CATKIN_DEPENDS actionlib_msgs message_runtimeroscpp std_msgs
DEPENDS Boost )
#找包
find_package(Boost REQUIRED COMPONENTSthread)generate_messages(DEPENDENCIES
#添加msg
geometry_msgsstd_msgs actionlib_msgs)
#python代码
catkin_python_setup()
文件声明:
add_message_files()
add_service_files()
add_action_files()
generate_dynamic_reconfigure_options() 配置消息、服务、行为、动态参数等的声明文件。
#编译目录下的文件
add_message_files( DIRECTORY msg
FILES
GridCells.msg
MapMetaData.msg
OccupancyGrid.msg
Odometry.msg
Path.msg)
#srv的相对文件
add_service_files( DIRECTORY srv
FILES
GetMap.srv
GetPlan.srv
SetMap.srv
LoadMap.srv)
# 动态参数配置放置位置 cfg 目录下
add_action_files( FILES
GetMap.action)
generate_dynamic_reconfigure_options(cfg/Test.cfg)
编译目标配置:
配置引用的头文件、可执行目标文件、要链接的库文件等。
include_directories()
add_executable()
add_library()
target_link_libraries()
#链接的库 和链接的.cpp 文件的地方 档前文件 系统 和 外部的头h 文件
include_directories(
include ${catkin_INCLUDE_DIRS}
${Boost_INCLUDE_DIRS}
)
add_executable(shape_server src/shape_server.cpp)
add_library(actionlib src/connection_monitor.cpp
src/goal_id_generator.cpp)
target_link_libraries(actionlib
${catkin_LIBRARIES}
${Boost_LIBRARIES})
编译安装:
配置安装的可执行脚本、可执行目标文件、头文件、库文件以及Luanch文件、bag文件等。
catkin_install_python()
install()
catkin_install_python(PROGRAMS scripts/genaction.py #python
DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}) #宏安装目录
install(TARGETS flat_world_imu_node RUNTIMEDESTINATION #可执行的目标文件
${CATKIN_PACKAGE_BIN_DESTINATION}) #放置的位置
install(DIRECTORY include/${PROJECT_NAME}/DESTINATION # 目标位置
${CATKIN_PACKAGE_INCLUDE_DESTINATION} )
install(DIRECTORY bag config launch rviz DESTINATION${CATKIN_PACKAGE_SHARE_DESTINATION} )
# 安装多个文件夹
单元测试 gtest:
设置单元测试的目标可执行文件/脚本、链接库等
catkin_add_gtest()
catkin_add_nosetests()
catkin_add_gtest(cache_unittest test/cache_unittest.cpp)
catkin_add_nosetests(utest.py)
条件编译:
判断目标文件
if(TARGET sensor_msgs_test) endif
判断编译环境
if(CMAKE_BUILD_TYPE STREQUAL DEBUG)
endif()
if(NOT CMAKE_CXX_STANDARD)
set(CMAKE_CXX_STANDARD 14)
endif()
判断测试
if(CATKIN_ENABLE_TESTING)
catkin_add_gtest(${PROJECT_NAME}_test test/example_1_test.cpp)
target_link_libraries(${PROJECT_NAME}_test ${catkin_LIBRARIES})
endif()
打开/关闭测试开关:
catkin config -DCATKIN_ENABLE_TESTING=ON/OFF