首页 > 编程知识 正文

现场使用的安全工具器应,如何使用cmake编译

时间:2023-05-05 12:13:42 阅读:224066 作者:4753

开篇介绍

纵观当下已有的室内外定位导航系统,大多数采用的是Ubuntu系统作为开发系统,在多线激光雷达、双目摄像头、姿态传感器和GPS等传感器获取到数据后进行前端视觉里程计、后端非线性优化、建图和回环检测等等工作,最后达到一定精确度的室内外定位导航系统。其中在后端优化等过程当中,常常很考验系统快速处理数据的能力,因此开始学习一下64位Ubuntu系统上处理后端数据的一些开发工具。

一、g++编译器

先在Ubuntu 18.04版本终端上安装g++编译器:

安装成功后,我们就可以开始使用系统自带的vim编辑器编写我们第一个C++程序啦:

随后,通过g++编译器对cpp文件进行编译,此时我们能够发现目录下生成了可执行文件a.out(也可自行命名该文件,如下终端指令所示),在终端下直接执行文件:

二、cmake编译工具

但当程序规模越来越大时,一个工程可能有许多个文件夹和里边的源文件,这时输入的编译命令将越来越长。通常一个小型C++项目含有十几个类,各类间还存在着复杂的依赖关系。其中一部分要编译成可执行文件,另一部分编译成库文件。如果仅靠g++命令,我们需要输入大量的编译指令,整个编译过程就会变得十分繁琐且不易于管理。因此我们采用了高效清晰的cmake编译工具。
首先,需要新建一个CMakeLists.txt文件,里边可做的操作有:①声明要求cmake的最低版本、②声明一个cmake工程、③添加一个可执行程序、④添加一个函数(静态、共享)库等。

在工程文件夹内新建一个build文件夹,里面存放cmake编译工具生成的许多中间文件,这些也是我们最后完成项目,即将发布项目时不需要的中间文件:


最后在终端上直接运行cmake工程即可:
这里要顺带提一下的是:
①在Linux中,库文件分成静态库和共享库两种。静态库以.a作为后缀名,共享库以.so为后缀名。所有库都是一些函数打包后的集合,差别在于静态库每次被调用都会生成一个副本,而共享库则只有一个副本,更省空间。
②库文件是压缩包,里边带有编译好的二进制函数。不过仅有.a和.so库文件的话,我们并不知道它里头的函数到底是什么,调用的形式又是怎样。为了更好的协同开发,我们需要提供一个头文件,说明这些库里面都有什么。因此别人拿到头文件和库文件,就可以调用这个库了,这也就是上述的libHelloSLAM.h文件。

三、Kdevelop集成开发环境

最后,我们来谈谈如何用IDE。前面的编程完全可以用一个简单的文本编辑器来完成。然而,你可能需要在各个文件间跳转,查询每个函数的声明和实现。因此,很有必要采用一个IDE,为开发者提供跳转、补全、断点调试等很多方便的功能。这里我们介绍Kdevelop,可通过终端上输入:sudo apt-get install kdevelop进行安装。
Kdevelop的优点主要有如下:
1.支持cmake工程。
2.对C++支持较好。有高亮、跳转、补全等功能,能自动排版代码。
3.能方便地看到各个文件和目录树。
4.有一键编译、断电调试等功能。
5.无须付费。
Kdevelop的基本使用流程如下:
1.首先终端上输入Kdevelop打开编译环境;
2.在所需构建工程的CMakeLists.txt上添加set(CMAKE_BUILD_TYPE “Debug”),即可进入调试模式,也可改为Release变成发布模式,执行速度较快。
3.启动Kdevelop,在工程目录中导入已有的CMakeLists.txt,然后在运行菜单栏中(Run)选择配置启动器(Configure Launches),然后加入应用程序(即add_executable中构建的可执行程序)。
4.最后,点击build构建执行文件后,点击Execute执行,即可在输出列表看见程序输出的信息。也可点击Debug进入调试模式,在断点出现出进行单步调试。

四、总结

在基本了解Ubuntu系统上应用开发的工具后,我们将在后续的项目当中不断加深这些工具的应用,接下来将要学习一些处理基本数据的库,如Eigen、OpenCV、PCL、g2o、Ceres等库,这些都是SLAM领域内必不可少的开源库,在实际项目应用中给开发者提供坚实的基础。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。