SLAM基础知识学习一

如何使用cmake

代码量较少会采用

g++ xxx.cppp

当程序越来越大时,如果使用g++去编译,会需要输入许多文件名称,会变得很繁琐。

cmake

1,使用cmake命令生成一个makefile文件。

2,然后用make命令去根据makefile的内容去编译整个工程。

具体实例

1,在项目文件夹中创建一个CmakeLists.txt文件

2,CmakeLists.txt文件中包含内容有

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

#声明一个cmake工程
project(Helloslam)




#添加一个可执行程序 程序名  源代码文件
add_executable( hello helloSlam.cpp )

CmakeLists.txt文件主要告诉cmake应该对这个目录要做什么是

cmake .
#在当前目录下

cmake会输出一些编译信息,然后再当前目录下生成一些中间文件,最重要的就是MakeFile。

3,用make命令对整个工程进行编译;

make

4,执行可执行文件

./hello

5,一般情况下,我们不想让cmake的信息留在当前工程文件下,我们会建立一个中间文件夹build,在生成之后会把build文件夹删掉。

mkdir build
cd build
cmake ..   //表示编译上一层文件夹
make

使用库

一个库是许多算法和程序的集合,比如说Eigen库,opencv库,如何用cmake生成一个库。

假设有个实现输出的printHello的函数在libHelloSLAM文件里面并且没有main函数

则我们在CMakeLists.txt

add_library( hello libHelloSLAM.cpp )#这条命令告诉cmake把这个文件编译成叫做hello的库
cd build
cmake ..
make

这时候build文件夹会生成一个libhello.a文件,这就是我们得到的库。静态库以.a结尾,共享库以.so结尾。所有库都是一些函数打包后的集合,差别在于静态库每次被调用会生成一个副本,而共享库只有一个副本,节省空间,下面是生成共享库的语句。

add_library( hello_shared SHARED libHelloSLAM.cpp )

此时得到的文件就是libhello_shared.so

调用

库文件是一个压缩包,里面是编译好的二进制函数。那为了使用这个库,我们需要一个头文件来说明这些库里有什么。对于库的使用者,只要拿到了头文件和库文件,就可以调用这个库。

libHelloSLAM.h
#ifndef LIBHELLOSLAM_H_
#define LIBHELLOSLAM_H_
//上面的宏定义是为了防止重复引用这个头文件而硬气的重定义错误

void printHello();

#end if

根据这个头文件和我们刚刚编译得到的库文件,就可以使用printHello函数了。最后我们写一个可执行函数来调用printHello函数。

useHello.cpp
#include "libHelloSLAM.h"

int man(){
printHello();
return 0}

然后再CMakeLists.txt中连接到库

add_executable(useHello useHello.cpp)
target_link_libraries( useHello hello_shared )

总结

1,程序代码由头文件和源文件组成

2,带有main函数的源文件可以编译成可执行程序,其他的编译成库文件(xxx.cc)

3,如果想调用库文件们则需要在带main函数中include头文件,并且将相应的库文件进行链接

 

add_library( hello_shared SHARED libHelloSLAM.cpp )//编译库文件
add_executable(useHello useHello.cpp)
target_link_libraries( useHello hello_shared )//链接库文件
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值