#HelloSLAM Learing
ch2/HelloSLAM.cpp //新建一个cpp文档
#include <iostream>
using namespace std;
int main( int argc,char** argv)
{
cout<<"Hello SLAM!"<<endl;
return 0;
}
cpp中有main可执行函数,可以通过进行直接编译成可执行文本
g++ helloSLAM.cpp
编译完成后会生成一个a,out的可执行文件.通过./进行执行程序输出结果
./a.out
Hello SLAM!
2使用cmake
首先在ch2中新建一个CMakeLists.txt文本文档,文件名不可写错不可更改.
vim CMakeLists.txt
cmake_minium_required( VERSION 2.8 )
project( helloSLAM )
add_executable( helloSLAM helloSLAM.cpp ) //将上面建立的helloSLAM.cpp链接到helloSLAM上
保存退出,编译执行 使用build分离
cmake ..
make
./helloSLAM //将会输出helloSLAM.cpp内函数的内容
2.4 使用库
新建一个libHelloSLAM.cpp文本文件,但是内部不含有main函数,意味着库中没有可以执行的文件
~ch2/libHelloSLAM.cpp
#include <iostream>
using namespace std;
void printHello()
{
cout<<"Hello SLAM"<<endl;
}
将上文本文件编译成一个库
add_library( hello libHelloSLAM.cpp )
.a 静态库
add_library( hello_shared SHARED libHelloSLAN.cpp )
.so 共享库
调用库还需要一个头文件ch2/libHelloSLAM.h
#ifndef LIBHELLOSLAM_H_
#define LIBHELLOSLAM_H_
void printHello();
#endif
现在可以使用这个库啦,需要写一个执行程序,调用这个函数
vim useHello.cpp
#include "libHelloSLAM.h"
int main( int argc, char** argv )
{
printHello();
return 0;
}
然后在CMakeList.txt中添加一个可执行程序的上生成命令,链接到刚才使用的库上:
add_executable( useHello useHello.cpp)
target_link_libraries( useHello hello_shared )
总结:
1.cmake是为了不用每个可执行文件(带main).cpp需要通过g++进行编译,而是通过cmake函数的
cmake .
make
直接全部编译,在多个程序组成非常有用,节约劳动
2.
调用一个库需要头文件和库文件
头文件.h: 表明这个库里有什么函数 = =里面有个printHello函数
库文件.a或者.so: 表达库里函数怎么实现的 = = printHello函数的具体怎么编译的
3.
调用库到自己的程序中
写一个执行文件(带main).cpp
程序是由头文件和源文件组成;
带有main函数的源文件编译成可执行程序,其他编译成库文件;
如果可执行程序想调用库文件中的函数,它需要参考该库提供的头文件的格式.同时要把可执行程序链接到库文件上.