欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

视觉slam十四讲学习笔记——Cmake入门

程序员文章站 2024-03-25 09:40:04
...

基本概念

cmake是一个编译工具和项目管理工具。

编译一个小程序

[email protected]:~/slambook/ch2$ vim helloSLAM.cpp
# include <iostream>
using namespace std;

int main(int argc,char** argv)
{
cout << "this is slam and cmake text" << endl;

return 0;
}

在源文件所在的目录下执行

cmake .

可以生成makefile等一系列中间文件,然后在在该目录下执行

make

生成最终的可执行文件。

将中间文件与源文件隔离

按照上面的步骤,我们的源代码将和那些包括Makefiles在内的中间文件混杂在一个目录中,但是为了便于管理,比较常用的方法是这样:
创建一个中间目录:

[email protected]:~/slambook/ch2$ mkdir build

在中间目录下执行cmake编译上级目录:

[email protected]:~/slambook/ch2$ cd build
[email protected]:~/slambook/ch2/build$ cmake ..

这样cmake会根据上级目录的cmakelist进行编译,但是编译的中间文件会放在当前目录下。
最后在当前目录下执行make命令即可

使用库文件

  • 编写库文件
    假设我们要写一个库文件,在该文件中实现一个函数,用于打印一句话,以便主文件调用和链接。
[email protected]:~/slambook/ch2$ vim libHelloSLAM.cpp
#include <iostream>
using namespace std;

void printHello()
{

cout << "this is a sentence from a library" << endl;

} 

然后在 CMakeLists.txt中添加这条:

add_library(hello libHelloSLAM.cpp)

再次重复上述的编译过程,可以在build中得到libhello.a这个库文件:

[email protected]:~/slambook/ch2/build$ ls
CMakeCache.txt  cmake_install.cmake  libhello.a
CMakeFiles      helloSLAM            Makefile

*编写头文件
要调用一个库文件,我们要在主函数中引用头文件.在头文件中声明了我们将要使用到的库文件的一些对象.因此,我们还需要手动编写一个头文件.
注意,头文件与库文件的文件名相同,和源文件放在一个目录下.

*写一个主函数调用库中的函数

#include <iostream>
#include "libHelloSLAM.h"
using namespace std;

int main(int argc,char** argv)
{
        cout << "now i will use a library fun" << endl;
        printHello();
        return 0;
}

*链接编译

# add linked target 在cmakelist中添加这个链接的对象
target_link_libraries(useHello hello_shared)

最后按上述方法添加主函数为可执行文件.

编译成功,DONE!