SLAM14讲-示例复现

CH02

hello slam

#打开Linux终端
#新建文件夹
mkdir slambook2
cd slambook2
mkdir ch2
cd ch2

#新建一个helloslam.cpp文件
touch helloslam.cpp

#vim编写helloslam程序
vim helloslam.cpp

***
#include <iostream>
using namespace std;

int main(int argc, char **argv){
        cout << "Hello SLAM" << endl;
        return 0;
}
***

#g++编译程序,编译完成后产生一个编译文件a.out
g++ helloslam.cpp

#没有g++,进行sudo apt-get install g++
#运行a.out文件
./a.out

#输出Hello SLAM

        文中,将代码放在家目录(/home),如上两个图对比,我们知道新建的文件夹都在/home/gao目录下,常用的cd、ls等目录都是运行位于/bin目录下的可执行文件。

        关于vim,常见命令如下:按i,进入插入模式,进行写代码,写完之后,按esc,退出,再按:wq保存并退出,(注意前面的冒号:)

cmake

        在一个cmake工程中,我们会用cmake命令生成一个makefile文件,然后用make命令根据这个makefile文件的内容编译整个工程。。仍然以上面的helloSLAM.cpp为例,这次我们不是直接使用g++,而是用cmake来制作一个工程,然后再编译它。在slambook/ch2/中新建一个CMakeLists.txt文件,内容如下:

#声明要求的cmake最低版本
cmake_minimum_required( VERSION 2.8 )

#声明一个cmake工程

project( HelloSLAM )

#添加一个可执行程序
#语法:add_executable( 程序名 源代码文件 )

add_executable( helloSLAM helloslam.cpp )
                                                   

        CMakeLists.txt文件用于告诉cmake我们要对这个目录下的文件做什么事情。CMake-Lists.txt文件的内容需要遵守cmake的语法。这个示例中,我们演示了最基本的工程: 指定一个工程名和一个可执行程序。

        现在,在当前目录下 (slambook/ch2/) ,调用cmake对该工程进行分析:

cmake会输出一些编译信息,然后在当前目录下生成一些中间文件,其中最重要的就是MakeFile。由于MakeFile是自动生成的,我们不必修改它。现在,用make命令对工程进行编译:

编译过程中会输出一个编译进度。如果顺利通过,我们就可以得到在CMakeLists.txt中声明的那个可执行程序helloSLAM。执行它。

cmake过程处理了工程文件之间的关系,而make过程实际调用了g++来编译程序。虽然这个过程中多了调用cmake和make的步骤,但我们对项目的编译管理工作,从输入一串g++命令,变成了维护若干个比较直观的CMakeLists.txt文件,这将明显降低维护整个工程的难度。比如,如果想新增一个可执行文件,只需在CMakeLists.txt 中添加一行“add executable”命令即可,而后续的步骤是不变的。cmake会帮我们解决代码的依赖关系,而无须输入一大串g++命令。
现在这个过程中唯一让我们不满的是,cmake生成的中间文件还留在我们的代码文件当中。当想要发布代码时,我们并不希望把这些中间文件一同发布出去。这时我们还需要把它们一个个删除,十分不便。一种更好的做法是让这些中间文件都放在一个中间目录中,在编译成功后把这个中间目录删除即可。所以,更常见的编译cmake工程的做法如下:

我们新建了一个中间文件夹“build”,然后进入build文件夹,通过cmake..命令对上一层文件夹,也就是代码所在的文件夹进行编译。这样,cmake产生的中间文件就会生成在build文件夹中,与源代码分开。当发布源代码时,只要把build文件夹删掉即可。

  • 17
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值