视觉slam14讲 ——ch2实践部分

学习目标

1.了较g++和cmake编译
2.掌握CMakeCache.txt中的相关编译操作(生成静态库和共享库,添加可执行程序,链接库)
3.重点掌握如何在IDE中进行编译

2.4.2 helloSLAM

基础

g++ helloSLAM.cpp

默认得到一个可执行文件 a.out
视觉slam14讲 ——ch2实践部分_第1张图片

./a.out

习题

g++编译指定输出的文件名的程序

g++ -o helloSLAM.exe helloSLAM.cpp

使用参数-o指定输出的文件名
视觉slam14讲 ——ch2实践部分_第2张图片

2.4.3 使用cmake

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

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

# 设置编译模式
set( CMAKE_BUILD_TYPE "Debug" )


执行命令

cmake .
make

通过MakeFile文件对工程进行编译

./helloSLAM

cmake编译后会产生大量的中间文件,我们不希望自己代码发布出去后带有这么多中间文件。所以在编译工程的时候,我们通常创建一个build文件夹专门用来存放编译过程中产生的中间文件,在代码发布时可以将build文件夹删除。

mkdir build
cd build
cmake ..
make

2.4.4 使用库

只有带有main函数的文件才能生成可执行文件/其他文件

在CMakeCache.txt

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

# 添加一个库
add_library( hello libHelloSLAM.cpp )
# 共享库
add_library( hello_shared SHARED libHelloSLAM.cpp )

add_executable( useHello useHello.cpp )
# 将库文件链接到可执行程序上
target_link_libraries( useHello hello_shared )

静态库以.a作为后缀名,共享库以.so结尾。
两者的区别在于静态库每次调用都会生成一个副本,而共享库只有一个副本,更省空间

add_executable( helloSLAM helloSLAM.cpp )

会生成静态库

add_library( hello_shared SHARED libHelloSLAM.cpp )

生成共享库

使用一个库需要提供头文件文件,只要有头文件和库文件就可以调用这个库了

target_link_libraries( 可执行文件 库文件 )

如果可执行文件想调用库文件中的函数,他需要参考该库提供的头文件,以明白调用的格式。同时要将可执行文件链接到库文件上

2.4.5 使用IDE

使用kdevelop作为IDE,下载如下:

sudo apt-get update
sudo apt-get install kdevelop

但是我这边就报了很多像是E: 无法定位软件包 kdevolop连接失败之类的

解决办法:直接换源
软件和更新---->ubantu软件下载----->使用阿里云

设置断点调试功能

(1)在CMakeCache.txt中将工程调为debug模式

# 设置编译模式
set( CMAKE_BUILD_TYPE "Debug" )

(2)配置
在视窗可以改变边框
右键设置断点,stop all结束

你可能感兴趣的:(#,视觉slam14讲,c++,开发语言)