在新学期即将来临的时候,我将努力找到自己的亮点去学习
slam:第二章带着理解去学习
(1)g++编译程序
(2)cmake编译程序
(3)使用库
(4)使用IDE 相当于使用开发工具(集成开发环境)

(1)g++编译程序 g++ 文件名(在终端输入)产生a.out文件 相当于 c 中的 .exe文件 拓展修改a.out文件的文件名 其实很简单的 编译的时候修改 g++ 文件名 -o 修改后的文件名(就是把默认的a.out文件名给修改成你想要的文件名) 成功

(2)使用cmake 对于大型程序我们都会用cmake来管理源代码(大多数的库都是使用cmake来管理源代码)
用cmake来制作一个工程 用cmake命令来生成一个makefile文件 然后用make命令根据这个makefile文件的内容来编译整个程序
过程首先建立一个CMakeLists.txt 这个文件告诉cmake要对这个目录下的文件要做什么事情 CMakeLists.txt是要满足cmake语法的

cmake . (其实输入这个就可以啦,cmake会自动检测CMakeLists.txt)

cmake+CMakeLists.txt 会自动生成一个MakeFile
make 生成我们要的可执行程序a.out 只是这个a.out我们使用其他的名字来代替了 针对的就是MakeFile 生成可执行文件的过程
./程序名 就可以直接执行整个程序来输出我们想要的结果

总结一下就是 cmake+make的做法 cmake会办法我们解决代码之间的依赖关系 cmake是用来管理源代码的 但是用cmake来管理代码的时候会出现一个问题就是在这个过程中会产生许多中间文件,一般我们发布代码的时候并不希望别人看到的中间文件所以一般会有一个单独的解决方案:一般我们是通过建立一个中间的文件夹来存放这些中间文件的
mkdir build 建立一个中间文件夹build
cd build
cmake … 让cmake从上层文件夹中去找CMakeLists.txt 这些中间文件就会自动生成在build文件夹中 MakeFile也会在这个文件夹中
make 把可执行的文件生成在build文件夹中 (直接在终端中去执行这个文件就可以啦)
./执行就可以看结果啦
这个就是简单的优化结果啦

(3)使用库了(这个可是很有用的在C++中也是非常关键的)
在C++中并不是所有的代码都是可以编译成 可执行文件的,只有带有miain函数的文件才会生成可执行的程序,而另一些代码我们只想把它打包成一个东西,供其他程序使用,这个东西是一个库(lib)
库是许多算法和程序的集合,今后会接触越来越多的库,好好学习别人的库是怎么用的 OPENCV计算机视觉库 eigen库是线性代数的库
学习如何使用cmake生成库 建立一个库文件–这个文件中是没有main函数的
和编译源文件的过程是一致的,只是最终产生的是一个库文件(库文件的文件名自己设置,需要在CMakeLists.txt文件中添加相关的语句 add_library(库名,源文件))
makdir build
cd build
cmake …
make
最终在build文件夹中生成一个库 库名:lib+我在CMakeLists.txt中定义的名字.a .a相当与在window中的.lib 静态库

库还有一种库在window下叫动态链接库 .dll在linux下叫共享库 .so文件

在CMakeLists.txt中添加add_library(库名,SHARED,源文件名)
在Linux中库分成两种,一种是静态库可共享库(动态库)
库是一些函数打包的集合,差别在于静态库每次在调用的时候就会生成一个副本,而共享库则产生一个副本,更产生一个副本,静态库和共享库都是可以用的
.lib和.so是库文件 是一个压缩包 里面是编译好的二进制文件,为了让别人使用这个库 我们提供头文件和库文件就可以调用这个库了,

调用库: 调用静态库是成功的 success 调用动态库也是成功的 success

我们使用别人的库,只需要 头文件+库文件(静态库和共享库均是可以的 二者选其一即可的

回顾: (1)首先,程序代码是由头文件和源文件组成
(2)带有main函数的源文件编译成可执行程序,其他的编译成库文件
(3)如果可执行程序想要调用库文件中的函数,他需要参考该库提供的头文件,以明白调用的格式,同时要把可执行程序链接到库文件上

这个过程是简单的了解来一下,所以接下来就是简单的使用IDE集成开发环境