博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
视觉slam十四讲学习笔记——Cmake入门
阅读量:5334 次
发布时间:2019-06-15

本文共 1592 字,大约阅读时间需要 5 分钟。

基本概念

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

编译一个小程序

water43@water43-GL62M-7RD:~/slambook/ch2$ vim helloSLAM.cpp# include 
using namespace std;int main(int argc,char** argv){cout << "this is slam and cmake text" << endl;return 0;}

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

cmake .

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

make

生成最终的可执行文件。

将中间文件与源文件隔离

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

创建一个中间目录:

water43@water43-GL62M-7RD:~/slambook/ch2$ mkdir build

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

water43@water43-GL62M-7RD:~/slambook/ch2$ cd buildwater43@water43-GL62M-7RD:~/slambook/ch2/build$ cmake ..

这样cmake会根据上级目录的cmakelist进行编译,但是编译的中间文件会放在当前目录下。

最后在当前目录下执行make命令即可

使用库文件

  • 编写库文件
    假设我们要写一个库文件,在该文件中实现一个函数,用于打印一句话,以便主文件调用和链接。
water43@water43-GL62M-7RD:~/slambook/ch2$ vim libHelloSLAM.cpp#include 
using namespace std;void printHello(){cout << "this is a sentence from a library" << endl;}

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

add_library(hello libHelloSLAM.cpp)

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

water43@water43-GL62M-7RD:~/slambook/ch2/build$ lsCMakeCache.txt  cmake_install.cmake  libhello.aCMakeFiles      helloSLAM            Makefile

*编写头文件

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

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

#include 
#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!

转载于:https://www.cnblogs.com/WaterZen/p/7603446.html

你可能感兴趣的文章
Hyper-V虚拟机上安装一个图形界面的Linux系统
查看>>
【Crash Course Psychology】2. Research & Experimentation笔记
查看>>
关于 linux 的 limit 的设置
查看>>
MTK笔记
查看>>
激活office 365 的启动文件
查看>>
【题解】 bzoj1597: [Usaco2008 Mar]土地购买 (动态规划+斜率优化)
查看>>
fat32转ntfs ,Win7系统提示对于目标文件系统文件过大解决教程
查看>>
shell cat 合并文件,合并数据库sql文件
查看>>
构建自己的项目管理方案
查看>>
利用pca分析fmri的生理噪声
查看>>
div水平居中且垂直居中
查看>>
epoll使用具体解释(精髓)
查看>>
AndroidArchitecture
查看>>
安装Endnote X6,但Word插件显示的总是Endnote Web"解决办法
查看>>
python全栈 计算机硬件管理 —— 硬件
查看>>
Delphi7编译的程序自动中Win32.Induc.a病毒的解决办法
查看>>
【转】javascript 中的很多有用的东西
查看>>
Android 监听返回键、HOME键
查看>>
Android ContentProvider的实现
查看>>
sqlserver 各种判断是否存在(表名、函数、存储过程等)
查看>>