使用cmake将一个源文件编译成一个可执行的二进制文件

时间:2021-06-18 10:03:47

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