CMake
make工具通过调用makefile文件中的命令便可以对大型程序进行编译,而makefile文件中就包含了调用gcc去编译多个源文件的命令。如果我们的程序是跨平台的,如果换个平台makefile又要重新修改,这会很麻烦,所以就出现了cmake这个工具,通过cmake我们就可以快速创建出不同平台的makefile文件。而cmake又是根据CMakeLists.txt来生成makefile文件。为了编译一个大型程序,你首先编写CMakeLists.txt。然后,通过cmake命令就可以生成makefile文件。然后通过make命令就可以使用这个makefile文件从而生成可执行文件。
CMake是一个跨平台的编译自动配置工具,它使用一个名为CMakeLists.txt的文件来描述构建过程,可以产生标准的构建文件。它可以用简单的语句来描述所有平台的安装(编译过程)。它能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。CMake并不直接建构出最终的软件,而是产生标准的建构档(如Unix的Makefile或Windows Visual C++的projects/workspaces),然后再依一般的建构方式使用。
CMake可以编译源代码、制作程式库、产生适配器(wrapper)、还可以用任意的顺序建构执行档。CMake支持in-place建构(二进档和源代码在同一个目录树中)和out-of-place建构(二进档在别的目录里),因此可以很容易从同一个源代码目录树中建构出多个二进档。CMake也支持静态与动态程式库的建构。CMake是一个比make更高级的编译配置工具。
CMake的组态档取名为CMakeLists.txt。组态档是用一种建构软件专用的特殊编程语言写的CMake脚本。文件CMakeLists.txt需要手工编写,也可以通过编写脚本进行半自动的生成。通过编写CMakeLists.txt,可以控制生成的Makefile,从而控制编译过程。
CMake主要特点:(1)、开放源代码,使用类BSD许可发布;(2)、跨平台,并可生成native编译配置文件,在Linux/Unix平台,生成makefile;在苹果平台,可以生成xcode;在windows平台,可以生成msvc的工程文件;(3)、能够管理大型项目;(4)、简化编译构建过程和编译过程,CMake的工具链非常简单:cmake+make;(5)、高效率;(6)、可扩展,可以为cmake编写特定功能的模块,扩充cmake功能。
CMakeLists.txt中命令不区分大小写,参数和变量区分大小写,注释采用#号,变量使用${xxx}引用,
cmake --version 检查cmake是否安装以及版本号
apt-get install cmake 安装cmake
add_executable( helloSLAM helloSLAM.cpp ) //添加可执行文件
add_library(hello libHelloSLAM.cpp) //添加静态库
add_library(hello_shared SHARED libHelloSLAM.cpp) //添加共享库
Linux中库分为静态库和共享库两种,静态库以.a作为后缀,共享库以.so为后缀,静态库每次被调用都会生成一个副本,而共享库则只有一个副本。
find_package
find_package可以帮助解决整个工程的依赖问题,自动把头文件和动态链接文件配置好
find_package( Sophus REQUIRED )
include_directories( ${Sophus_INCLUDE_DIRS} )
add_executable( useSophus useSophus.cpp )
target_link_libraries( useSophus ${Sophus_LIBRARIES} )
git clone https://github.com/OctoMap/octomap
mkdir build
cd build
cmake ..
make
sudo make install 将程序安装至系统中