编译配置主要有宏设置、包依赖、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)
配置程序包的编译、执行、测试依赖以及插件、程序包集等
build_depend描述了程序包的编译依赖
exec_depend描述了程序包的执行依赖等
test_depend描述了进行单元测试的依赖项
export标签描述了额外添加的信息如插件、程序包集
- # 消息生成
message_generation message_runtime -
-
- # 单元测试
rostest -
-
- # 消息
sensor_msgs geometry_msgs -
-
- # 插件
"${prefix}/nodelet_description.xml"/> -
-
- # 程序包集
配置第三方软件、程序包、消息、头文件等依赖。
当前包的依赖包 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} )
- # 安装多个文件夹
设置单元测试的目标可执行文件/脚本、链接库等
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