SLAM算法使用到了c++的新特性:auto自动推导变量类型,简洁循化体,lamada函数。这些新特型提高了编程效率。
编译工具使用CMake,ubuntu安装可以使用
sudo apt-get install cmake
CMake是什么?cmake(cross platform Make)是一个开源的跨平台自动化构建系统,用来管理程序构建,不依赖特定的编译器。CMake是一个跨平台的安装/编译工具,它能用简单的语句描述所有平台的安装/编译过程。通常在UNIX环境下,CMake根据CMakeLists.txt生成Makefile,在Makefile中定义了具体的编译过程。
在未使用CMake时,构建一个项目需要以下几个过程:
准备工作:
手动添加环境变量
在项目中手动添加项目路径
在项目中手中添加库路径
在项目中首动添加链接库名
在Debug和Release下分别配置对应的库
所以存在以下问题
方法不通用,对于不同版本的opencv,库的名称也不一样,在手动添加时需要修改库名称
构建好的项目不可以移植到其他的平台上,需要重新配置,代码移植成本很高
整个过程非常繁琐,非常容易出错
CMake常用指令
cmake_minimum_required(VERSION 2.8)#制定CMake版本,如果小于该版本,程序停止运行
project(TEST)#设置当前的项目名称为TEST
#指定头文件的搜索路径,方便编译器查找相应头文件
include_directories(/usr/local/inlcude)
#例子:
#要么在main.cpp文件中添加路径为/usr/local/include/opencv/cv.h
#要么在CMakelists.txt文件中添加include_directories(/usr/local/inlcude)
#这样在使用的时候就可以使用#include "opencv/cv.h",这样编译器就可以自动搜索到该头文件
#用指定源文件为工程添加可执行文件
add_executable(hello main.cpp)
#使用main.cpp生成一个hello的可执行文件
#设置变量代替值
set(variable value)
#eg. set(SRC_LST main.cpp other.cpp)
#可以使用SRC_LST代替后边的两个cpp程序
#将指定的原文件生成链接库文件。STATIC静态链接库,SHARED为共享链接库
add_library(libname STATIC/SHADER sources)
#为库或者可执行的二进制文件添加库链接
target_link_libraries(target library1 library2 ...)
#在工程中添加子目录,目录可以是绝对路径或者是相对路径、
add_subdirectory(source_dir)
#在目录下查找所有的子文件
aux_source_directory(dir varname)
#搜索第三方库
find_library(packageNmae version EXACT/QUIET/REQUIRED)
#version:指定查找库的版本。EXACT:要求该版本号必须匹配
#QUIET:禁止显示没有找到时的警告信息
#REQUIRED:选项表示如果包没有找到,则cmake的过程会自动终止,并输出警告信息
#当find_library 找到一个库时,以下变量会自动初始化,NAME表示库的名称
#<NAME>_FOUND :显示是否找到库的标记
#<NAME>_INCLUDE_DIRS 或 <NAME>_INCLUDE:头文件
#<NAME>_LIBRARIES 或者 <NAME>_LIBS :库文件
CMake注意事项:
cmake指令不区分大小写
参数和变量名称只可以使用数字、字母、下划线、破折号中的组合。引用变量使用${ },如果有多个变量使用空格隔开
一般来说工程有多个目录。使用CMakeLists.txt构建文件可以使用两种方式:(1)工程存在多个目录,只用一个CmakeLists.txt文件来管理。(2)存在多个目录,每个源文件都是使用一个CMakeLists.txt文件来管理