cmake
在cmake工程中,根据CMakeLists文件内容,组织源文件和库文件,用cmake命令生成makefile文件,然后用make命令根据makefile文件得内容编译整个过程。
command window编译时的命令
//编译cmake工程,建立一个build文件夹存放编译过程中产生的中间文件。
//在终端以此输入如下命令
mkdir build
cd build
cmake ..
make
//上述步骤完成编译,生成可执行程序的可执行文件
//接下来运行程序,重要!!!!
./main
//main为可执行程序名字,
当提供了库文件和对应的头文件才可以调用该库。
在Linux中,库文件分为静态库(以.a为后缀名)和共享库(以.so为后缀名),两者区别在于静态库每次被调用都会生成一个副本,而共享库则只有一个副本。
库文件是压缩包,含有编译好的二进制文件,我们并不知道里面到底是什么,所以需要提供头文件,说明库里有什么。
库文件中是没有main 函数的
//libHelloSLAM.cpp
#inculde<iostream>
using namespace;
void printhello()
{
cout<<"hello SLAM"<<endl;
}
头文件更多的是定义变量,声明函数;库文件更多的是函数的定义实现
头文件
//libHelloSLAM.h
#ifndef LIBHELLOSLAM_H_//防止重复定义
#define LIBHELLOSLAM_H_
void printHello();
#endif
//添加可执行程序的生成命令,链接到生成的库
add_executable(useHello useHello.cpp)
//添加可执行文件,语法:add_executable(程序名 源代码文件)
target_link_libraries(useHello hello_shared)
//将程序链接到库文件,语法:target_link_libraries(程序名 库名)
ADD_LIBRARY基本语法:
ADD_LIBRARY(libname [SHARED|STATIC|MODULE] [EXCLUDE_FROM_ALL]
source1 source2 ... sourceN)
//libname是编译后的库文件名称 中间是选择共享/静态库文件 source1 source2等是编译成库文件的源代码
//EXCLUDE_FROM_ALL 参数的意思是这个库不会被默认构建,除非有其他的组件依赖或者手工构建
参考高翔------视觉slam14讲
https://cmake.org/cmake/help/latest/guide/tutorial/index.html