• Ros Cmakelist 编译配置


    前言;

    编译配置主要有宏设置、包依赖、Cmake编译管理、catkin编译策略等。

    宏设置

    包依赖package.xml文件

    编译管理CMakeList.txt文件

    catkin编译策略:catkin编译策略主要指编译目标是Release、Debug、编译输出空间等。

    宏设置:

    目标路径 set(CATKIN_GLOBAL_LIB_DESTINATION lib)

    编译要求:

    1. set(CMAKE_CXX_STANDARD 14)
    2. set(CMAKE_CXX_STANDARD_REQUIRED ON)

    包依赖package.xml文件:

    配置程序包的编译、执行、测试依赖以及插件、程序包集等

    build_depend描述了程序包的编译依赖

     exec_depend描述了程序包的执行依赖等

    test_depend描述了进行单元测试的依赖项

    export标签描述了额外添加的信息如插件、程序包集

    特定依赖:

    1. #  消息生成
    2. message_generation
    3. message_runtime
    4. #  单元测试
    5. rostest
    6. #  消息
    7. sensor_msgs
    8. geometry_msgs
    9. #  插件
    10. "${prefix}/nodelet_description.xml"/>
    11. #  程序包集

    程序包依赖配置:

    配置第三方软件、程序包、消息、头文件等依赖。

    当前包的依赖包        find_package()

    依赖当前包的声明    catkin_package()

    生成消息、服务所需的依赖    generate_messages()

    Python脚本需要        catkin_python_setup()

    1. find_package(catkin REQUIRED COMPONENTSactionlib_msgs message_generation roscpp std_msgs)
    2. #找依赖
    3. catkin_package( INCLUDE_DIRS include
    4. LIBRARIES actionlib
    5. CATKIN_DEPENDS actionlib_msgs message_runtimeroscpp std_msgs
    6. DEPENDS Boost )
    7. #找包
    8. find_package(Boost REQUIRED COMPONENTSthread)generate_messages(DEPENDENCIES
    9. #添加msg
    10. geometry_msgsstd_msgs actionlib_msgs)
    11. #python代码
    12. catkin_python_setup()

    文件声明:

     add_message_files()

     add_service_files()

     add_action_files() 

     generate_dynamic_reconfigure_options() 配置消息、服务、行为、动态参数等的声明文件。

    1. #编译目录下的文件
    2. add_message_files( DIRECTORY msg
    3. FILES
    4. GridCells.msg
    5. MapMetaData.msg
    6. OccupancyGrid.msg
    7. Odometry.msg
    8. Path.msg)
    9. #srv的相对文件
    10. add_service_files( DIRECTORY srv
    11. FILES
    12. GetMap.srv
    13. GetPlan.srv
    14. SetMap.srv
    15. LoadMap.srv)
    16. # 动态参数配置放置位置 cfg 目录下
    17. add_action_files( FILES
    18. GetMap.action)
    19. generate_dynamic_reconfigure_options(cfg/Test.cfg)

    编译目标配置:

    配置引用的头文件、可执行目标文件、要链接的库文件等。

    include_directories()

    add_executable()

    add_library()

    target_link_libraries()

    1. #链接的库 和链接的.cpp 文件的地方 档前文件 系统 和 外部的头h 文件
    2. include_directories(
    3. include ${catkin_INCLUDE_DIRS}
    4. ${Boost_INCLUDE_DIRS}
    5. )
    6. add_executable(shape_server src/shape_server.cpp)
    7. add_library(actionlib src/connection_monitor.cpp
    8. src/goal_id_generator.cpp)
    9. target_link_libraries(actionlib
    10. ${catkin_LIBRARIES}
    11. ${Boost_LIBRARIES})

    编译安装:

    配置安装的可执行脚本、可执行目标文件、头文件、库文件以及Luanch文件、bag文件等。

     catkin_install_python()

     install()

    1. catkin_install_python(PROGRAMS scripts/genaction.py #python
    2. DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}) #宏安装目录
    3. install(TARGETS flat_world_imu_node RUNTIMEDESTINATION #可执行的目标文件
    4. ${CATKIN_PACKAGE_BIN_DESTINATION}) #放置的位置
    5. install(DIRECTORY include/${PROJECT_NAME}/DESTINATION # 目标位置
    6. ${CATKIN_PACKAGE_INCLUDE_DESTINATION} )
    7. install(DIRECTORY bag config launch rviz DESTINATION${CATKIN_PACKAGE_SHARE_DESTINATION} )
    8. # 安装多个文件夹

    单元测试 gtest:

    设置单元测试的目标可执行文件/脚本、链接库等

     catkin_add_gtest()

     catkin_add_nosetests()

    1. catkin_add_gtest(cache_unittest test/cache_unittest.cpp)
    2. catkin_add_nosetests(utest.py)

    条件编译:

    1.  判断目标文件
    2. if(TARGET sensor_msgs_test) endif
    3.  判断编译环境
    4. if(CMAKE_BUILD_TYPE STREQUAL DEBUG)
    5. endif()
    6. if(NOT CMAKE_CXX_STANDARD)
    7. set(CMAKE_CXX_STANDARD 14)
    8. endif()
    9.  判断测试
    10. if(CATKIN_ENABLE_TESTING)
    11. catkin_add_gtest(${PROJECT_NAME}_test test/example_1_test.cpp)
    12. target_link_libraries(${PROJECT_NAME}_test ${catkin_LIBRARIES})
    13. endif()
    14.  打开/关闭测试开关:
    15. catkin config -DCATKIN_ENABLE_TESTING=ON/OFF
  • 相关阅读:
    webpack基础教程
    Netty websocket配置wss
    【Java多线程JUC入门详解】Atomic原子类、LongAdder源码详解
    Mybatis批量操作解析
    Leetcode—80.删除有序数组中的重复项II【中等】
    组件切换之笨办法、动态组件(is属性、keep-alive)、插槽(不具名、具名)
    基于Python的ArcGIS流程化数据处理及应用开发
    【算法竞赛刷题模板30】状态压缩dp题总结
    echarts图 横向滚动条
    【深度神经网络(DNN)】实现车牌识别
  • 原文地址:https://blog.csdn.net/weixin_44025389/article/details/126468237