CMake学习笔记四:usb_cam的CMakeLists解析

最近在学习cmake,在完整看了《cmake实践》一书后,跟着书上例程敲了跑了一遍,也写了几篇相关读书笔记,算是勉强基本入门了。所以找了usb_cam软件包的CMakeLists.txt来进一步学习,在看懂这个例子之后,准备写篇博客记录一下,若有谬误还望指正。

<br />

1 usb_cam软件包简介

现在市面上最常见的还是USB摄像头,物美价廉,要想使USB摄像头在ROS下正常工作,我们就需要一个软件包来支持,现在ROS下最常用的usb摄像头软件包就是usb_cam,简单理解该软件包就是V4L(Video for Linux)USB摄像头驱动在ROS在的一个移植版本。

下面我们在github上来下载该源码,github上的usb_cam源码网址如下:

https://github.com/ros-drivers/usb_cam

1521186605257481.png

通过下图来查看整个下载操作流程:

Screenshot from 2018-03-16 16:01:37.png

下面来查看usb_cam源码介绍:

Screenshot from 2018-03-16 16:18:28.png

2 源码剖析

下载好源码后,<span style="color:red">找到CMakeFiles.txt文件,修改添加注释后的内容如下:</span>

1#检查cmake的版本,要求至少为2.8.3 2cmake_minimum_required(VERSION 2.8.3) 3 4#定义工程名为usb_cam 5project(usb_cam) 6 7#搜索外部库()catkin,并在后面列出了与 catkin包 相关的一些部件清单 8find_package(catkin REQUIRED COMPONENTS image_transport roscpp std_msgs std_srvs sensor_msgs camera_info_manager) 9 10#先搜索cmake自己的PkgConfig模块,才能使用pkg_check_modules 11find_package(PkgConfig REQUIRED) 12#pkg_check_module与find_package功能基本一直,也是搜索外部库 13pkg_check_modules(avcodec libavcodec REQUIRED) #libavcodec库用于读取视频文件 14pkg_check_modules(swscale libswscale REQUIRED) #libswscale库用于各种图像像素格式的转换 15 16#catkin_package 宏是 catkin 的宏之一,声明要传递给依赖项目的内容,生成 cmake 配置文件。 17catkin_package( 18 INCLUDE_DIRS include 19 LIBRARIES ${PROJECT_NAME} 20) 21 22#用来向工程添加多个头文件搜索路径 23include_directories( 24 include 25 ${catkin_INCLUDE_DIRS} 26 ${avcodec_INCLUDE_DIRS} 27 ${swscale_INCLUDE_DIRS} 28) 29 30#将指定的源文件usb_cam.cpp生成链接库文件,然后添加到工程中去 31add_library(${PROJECT_NAME} src/usb_cam.cpp) 32 33#用来向工程usb_cam添加多个链接库 34target_link_libraries(${PROJECT_NAME} 35 ${catkin_LIBRARIES} 36 ${avcodec_LIBRARIES} 37 ${swscale_LIBRARIES} 38) 39 40##生成一个名为usb_cam_node的可执行文件,其对应源文件是nodes/usb_cam_node.cpp 41add_executable(${PROJECT_NAME}_node nodes/usb_cam_node.cpp) 42 43#用来向可执行文件usb_cam_node添加多个链接库 44target_link_libraries(${PROJECT_NAME}_node 45 ${PROJECT_NAME} 46 ${avcodec_LIBRARIES} 47 ${swscale_LIBRARIES} 48 ${catkin_LIBRARIES} 49) 50 51#可执行文件usb_cam_node安装到CATKINBIN目录下 (在可执行文件链接了外部库后) 52#静态库usb_cam安装到CATKINLIB目录下 (在工程链接了外部库后) 53install(TARGETS ${PROJECT_NAME}_node ${PROJECT_NAME} 54 RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 55 LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 56) 57 58#在/launch目录下安装一个启动文件 59install(DIRECTORY launch/ 60 DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/launch 61 FILES_MATCHING PATTERN "*.launch" 62) 63 64#在catkin的include目录下安装include/usb_cam目录下的所有内容 65install(DIRECTORY include/${PROJECT_NAME}/ 66 DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} 67 FILES_MATCHING PATTERN "*.h" PATTERN "*.hpp" 68)

具体的分析已在注释中详细说明了,有些不明白的指令可以参考我的另一篇博客 - CMake学习笔记三:cmake 常用指令

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )