catkin build说明

2023-11-01 13:01
文章标签 build 说明 catkin

本文主要是介绍catkin build说明,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  • 与catkin_make不同,可以参考catkin build – Build Packages中文翻译版手册
  • catkin build 默认会生成.private文件夹。链接时候可能出现失败的问题。catkin参数配置之软连接模式
    改为如下模式即可
catkin init
catkin config --merge-devel
catkin build

Bug

Issue1: 引用工作空间下别的包的lib报错

参考CmakeLists.txt import and export官方文档
假设ov_core需要被ov_msckf调用,一般情况ov_core需要export他自身。

  • ov_core的CmakeLists
//自定义一个super_point_glue_lib
add_library(super_point_glue_lib SHAREDsrc/track/super_point.cppsrc/track/super_glue.cpp)target_link_libraries(super_point_glue_libnvinfernvonnxparser${OpenCV_LIBRARIES}${CUDA_LIBRARIES}yaml-cpptensorrtbuffer_ov_core)//自定义ov_core_lib     
list(APPEND LIBRARY_SOURCESsrc/dummy.cppsrc/cpi/CpiV1.cppsrc/cpi/CpiV2.cppsrc/sim/BsplineSE3.cppsrc/track/TrackBase.cppsrc/track/TrackAruco.cppsrc/track/TrackDescriptor.cppsrc/track/TrackKLT.cppsrc/track/TrackSIM.cppsrc/types/Landmark.cppsrc/feat/Feature.cppsrc/feat/FeatureDatabase.cppsrc/feat/FeatureInitializer.cppsrc/utils/print.cpp
)
file(GLOB_RECURSE LIBRARY_HEADERS "src/*.h")
add_library(ov_core_lib SHARED ${LIBRARY_SOURCES} ${LIBRARY_HEADERS})
#target_link_libraries(ov_core_lib ${thirdparty_libraries} )
target_link_libraries(ov_core_lib super_point_glue_lib ${thirdparty_libraries} ) # add super_point_glue_lib
target_include_directories(ov_core_lib PUBLIC src/)
install(TARGETS ov_core_libARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
install(DIRECTORY src/DESTINATION ${CATKIN_GLOBAL_INCLUDE_DESTINATION}FILES_MATCHING PATTERN "*.h" PATTERN "*.hpp"
)
  • ov_msckf
find_package(catkin QUIET COMPONENTS roscpp rosbag tf std_msgs geometry_msgs sensor_msgs nav_msgs visualization_msgs image_transport cv_bridge ov_core ov_init message_generation)
catkin_package(CATKIN_DEPENDS roscpp rosbag tf std_msgs geometry_msgs sensor_msgs nav_msgs visualization_msgs image_transport cv_bridge ov_core ov_init seg_ros message_runtimeINCLUDE_DIRS src/LIBRARIES ov_msckf_lib)
list(APPEND thirdparty_libraries${Boost_LIBRARIES}${OpenCV_LIBRARIES}${CERES_LIBRARIES}${catkin_LIBRARIES}
)
list(APPEND LIBRARY_SOURCESsrc/dummy.cppsrc/sim/Simulator.cppsrc/state/State.cppsrc/state/StateHelper.cppsrc/state/Propagator.cppsrc/core/VioManager.cppsrc/core/VioManagerHelper.cppsrc/update/UpdaterHelper.cppsrc/update/UpdaterMSCKF.cppsrc/update/UpdaterSLAM.cppsrc/update/UpdaterZeroVelocity.cpp
)
file(GLOB_RECURSE LIBRARY_HEADERS "src/*.h")
add_library(ov_msckf_lib SHARED ${LIBRARY_SOURCES} ${LIBRARY_HEADERS})target_link_libraries(ov_msckf_lib yaml-cpp ${thirdparty_libraries})

这里提供一个补救小技巧,当前面没有进行正常的install操作,但是ov_msckf包依旧想链接super_point_glue_lib时,可以手动指定这个包的位置。一般情况下,如果像ov_core那样正常export和install,那么ov_msckf就可以找到。

# wzy import this lib
# add_library(super_point_glue_lib SHARED IMPORTED)
# set_property(TARGET super_point_glue_lib PROPERTY
#              IMPORTED_LOCATION "/home/zph/vins_ws/devel/lib/libsuper_point_glue_lib.so")
# target_link_libraries(ov_msckf_lib super_point_glue_lib yaml-cpp ${thirdparty_libraries}) # wzy change

这篇关于catkin build说明的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/323175

相关文章

Java中数组与栈和堆之间的关系说明

《Java中数组与栈和堆之间的关系说明》文章讲解了Java数组的初始化方式、内存存储机制、引用传递特性及遍历、排序、拷贝技巧,强调引用数据类型方法调用时形参可能修改实参,但需注意引用指向单一对象的特性... 目录Java中数组与栈和堆的关系遍历数组接下来是一些编程小技巧总结Java中数组与栈和堆的关系关于

mybatis-plus QueryWrapper中or,and的使用及说明

《mybatis-plusQueryWrapper中or,and的使用及说明》使用MyBatisPlusQueryWrapper时,因同时添加角色权限固定条件和多字段模糊查询导致数据异常展示,排查发... 目录QueryWrapper中or,and使用列表中还要同时模糊查询多个字段经过排查这就导致只要whe

SpringBoot改造MCP服务器的详细说明(StreamableHTTP 类型)

《SpringBoot改造MCP服务器的详细说明(StreamableHTTP类型)》本文介绍了SpringBoot如何实现MCPStreamableHTTP服务器,并且使用CherryStudio... 目录SpringBoot改造MCP服务器(StreamableHTTP)1 项目说明2 使用说明2.1

JAVA覆盖和重写的区别及说明

《JAVA覆盖和重写的区别及说明》非静态方法的覆盖即重写,具有多态性;静态方法无法被覆盖,但可被重写(仅通过类名调用),二者区别在于绑定时机与引用类型关联性... 目录Java覆盖和重写的区别经常听到两种话认真读完上面两份代码JAVA覆盖和重写的区别经常听到两种话1.覆盖=重写。2.静态方法可andro

zookeeper端口说明及介绍

《zookeeper端口说明及介绍》:本文主要介绍zookeeper端口说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、zookeeper有三个端口(可以修改)aVNMqvZ二、3个端口的作用三、部署时注意总China编程结一、zookeeper有三个端口(可以

Go语言中make和new的区别及说明

《Go语言中make和new的区别及说明》:本文主要介绍Go语言中make和new的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 概述2 new 函数2.1 功能2.2 语法2.3 初始化案例3 make 函数3.1 功能3.2 语法3.3 初始化

java中新生代和老生代的关系说明

《java中新生代和老生代的关系说明》:本文主要介绍java中新生代和老生代的关系说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、内存区域划分新生代老年代二、对象生命周期与晋升流程三、新生代与老年代的协作机制1. 跨代引用处理2. 动态年龄判定3. 空间分

MySQL之InnoDB存储引擎中的索引用法及说明

《MySQL之InnoDB存储引擎中的索引用法及说明》:本文主要介绍MySQL之InnoDB存储引擎中的索引用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录1、背景2、准备3、正篇【1】存储用户记录的数据页【2】存储目录项记录的数据页【3】聚簇索引【4】二

mysql中的数据目录用法及说明

《mysql中的数据目录用法及说明》:本文主要介绍mysql中的数据目录用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、版本3、数据目录4、总结1、背景安装mysql之后,在安装目录下会有一个data目录,我们创建的数据库、创建的表、插入的

Maven中的profiles使用及说明

《Maven中的profiles使用及说明》:本文主要介绍Maven中的profiles使用及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录主要用途定义 Profiles示例:多环境配置激活 Profiles示例:资源过滤示例:依赖管理总结Maven 中的