cmake是一个工程构建工具,使用它可以自动地生成makefile文件,且能够构建编译文件,链接库,安装文件等。
现构建一个使用cmake的项目或工程,假设这个项目或工程的名字为code。
1.首先,新建一个文件夹,命名为code,于是code就是代码的根目录。并进入code目录中。
zhuquan@zhuquan-HP-Z230-Tower-Workstation:$ mkdir code
zhuquan@zhuquan-HP-Z230-Tower-Workstation:$ cd code
2.其次,在code目录中新建几个子目录,分别命名为src,include,lib,bin。
其中,src用来存放源文件;
include用来存放头文件;
lib用来存放编译好的库文件;
bin用来存放编译好的可执行的二进制文件。
zhuquan@zhuquan-HP-Z230-Tower-Workstation:~/code$ mkdir src include lib bin
注:为了把code的目录结构告诉cmake,所以我们需要在code目录中建立一个cmake编译文件,命名为CMakeLists.txt。
zhuquan@zhuquan-HP-Z230-Tower-Workstation:~/code$ touch CMakeLists.txt
并在其中写入如下内容:
其中“写入”的方法为zhuquan@zhuquan-HP-Z230-Tower-Workstation:~//code$ gedit/vim CMakeLists.txt
CMAKE_MINIMUM_REQUIRED( VERSION 2.8 ) #设定使用的cmake的版本
PROJECT( code ) #设定项目或工程名
SET( CMAKE_CXX_COMPILER "g++") #设定编译器
#设定编译后生成的可执行二进制文件所在的目录
SET( EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
#设定编译后生成的库文件所在的目录
SET( LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
#并且把该目录设为链接目录
LINK_DIRECTORIES( ${PROJECT_SOURCE_DIR}/lib)
#设定头文件所在的目录
INCLUDE_DIRECTORIES( ${PROJECT_SOURCE_DIR}/include)
#如果希望进入源代码文件夹仍可以继续使用cmake,则需增加文件夹
ADD_SUBDIRECTORY( ${PROJECT_SOURCE_DIR}/src)
3.接下来,实现怎么样使用CMake将一个源文件编译成一个可执行的二进制文件
3.1.首先,在src子目录下新建一个名字为main.cpp的源文件
进入src子目录:
zhuquan@zhuquan-HP-Z230-Tower-Workstation:~/code$ cd src
新建一个名字为main.cpp的源文件:
zhuquan@zhuquan-HP-Z230-Tower-Workstation:~/code/src$ touch main.cpp
并在main.cpp中写入如下内容:(“写入”的操作如上)
#include <iostream>
int main(int argc, char**argv)
{
std::cout<<"Hello SLAM!"<<std::endl;
return 0;
}
为了将这个源文件编译成一个可执行的二进制文件,我们还需在src子目录下新建一个cmake编译文件,名字为CMakeLists.txt
zhuquan@zhuquan-HP-Z230-Tower-Workstation:~/code/src$ touch CMakeLists.txt
并写入如下内容:("写入"操作如上)
# 增加一个可执行的二进制 ADD_EXECUTABLE( main main.cpp )
3.2 这样cmake就会把这个main.cpp编译成一个名字为main的可执行的二进制文件了
首先转入代码根目录下,即在终端输入
zhuquan@zhuquan-HP-Z230-Tower-Workstation:~/code/src$ cd ..
结果为
zhuquan@zhuquan-HP-Z230-Tower-Workstation:~/code/src$
注:cd和..之间有个空格。
接着在终端依次输入:
zhuquan@zhuquan-HP-Z230-Tower-Workstation:~/code/src$ mkdir build zhuquan@zhuquan-HP-Z230-Tower-Workstation:~/code/src$ cd build zhuquan@zhuquan-HP-Z230-Tower-Workstation:~/code/src$ cmake .. zhuquan@zhuquan-HP-Z230-Tower-Workstation:~/code/src$ make
编译通过的话就会在bin子目录下生成一个名字为main的可执行的二进制文件了
如果你执行这个名字为main的二进制文件,就会输出 Hello SLAM! 啦!
zhuquan@zhuquan-HP-Z230-Tower-Workstation:~/code/build$ cd ..
zhuquan@zhuquan-HP-Z230-Tower-Workstation:~/code$ cd bin
zhuquan@zhuquan-HP-Z230-Tower-Workstation:~/code/bin$ ./main