![e446b20022fcb95b8d5d5f09c061237c.png](https://img-blog.csdnimg.cn/img_convert/e446b20022fcb95b8d5d5f09c061237c.png)
「本文简单介绍了C++工程管理工具cmake,并示范了Linux系统下,在终端中使用 cmake 对 C++ 文件进行编译的过程和注意事项。」
通常来讲,对自己编写的C++文件或工程进行编译时可以使用g++指令(需要对每一个程序和源文件分别使用g++指令编译),当程序变大时,一个工程文件往往会包含很文件夹和源文件,这时我们需要的编译指令将越来越长,整个编译过程会变得异常繁琐。因此对于C++项目,使用一些工程管理工具会更加高效。
cmake就是一个在工程上被广泛使用的C++工程管理工具,很多库都用cmake管理源代码,因此了解cmake的指令和过程是很重要的。
我们以编译一个简单的C++程序为例说明cmake的使用。
在Linux系统根目录下新建一个cppSpace文件夹,在该文件夹中新建一个HelloWorld.cpp文件
//这是一个实例文件
在cppSpace文件夹下新建一个CMakeLists.txt文件(注意该文件的命名不能自己随便改,不然编译时会报错),打开该文件使用cmake语法编写一下内容
# 声明要求的cmake最低版本
CMakeLists.txt文件作用是告诉cmake要对这个文件夹(cppSpace文件夹)下的文件做什么。
接下来在该文件夹中打开终端,并在终端中输入:
cmake .
注意该指令中的“.”不可忽略。输入该指令并回车后,cmake会输出一些编译信息,并在当前目录下生成一些 中间文件,其中最重要的就是MakeFile文件,它是自动生成的(自动化编译脚本)。
![06139cef9165312bc7e52433d72493e1.png](https://img-blog.csdnimg.cn/img_convert/06139cef9165312bc7e52433d72493e1.png)
接下来使用make命令对工程进行编译,继续在终端输入:make
![efde6fb0f1309f9c7724ddf29fbaa246.png](https://img-blog.csdnimg.cn/img_convert/efde6fb0f1309f9c7724ddf29fbaa246.png)
然后在终端输入程序名:./Helloworld (注意不是工程名HelloWorld,也不是源代码名HelloWorld.cpp)
![28823f305259af7e6a3406ae4de94b86.png](https://img-blog.csdnimg.cn/img_convert/28823f305259af7e6a3406ae4de94b86.png)
相比于直接使用g++指令对每一个程序和源文件进行编译,我们在使用cmake对C++工程进行编译时,只需要管理维护CMakeLists.txt一个文件。例如:如果我们想再新增一个可执行文件,只需要在CMakeLists.txt中添加一行“add_executable”命令即可,后续步骤不需要改变。
按照上述过程进行编译,唯一有些遗憾的地方是编译过程中生成的中间文件停留在了该文件夹(cppSpace文件夹)中,这些中间文件在我们发布代码时是需要剔除的,因此造成了一些不便,解决办法是:新建一个中间目录(文件夹)专门存放这些中间文件,编译成功后直接删除这个中间目录就可以。因此更常见的办法是在终端中:
# 新建一个中间目录 build
mkdir build
# 使终端进入该中间目录
cd build
# 使用cmake对工程进行编译(注意最后是两个"..",表示对上一层目录进行编译)
cmake ..
# 最后使用make指令进行编译
make
使用上述指令在终端中重新对工程进行编译:
![2bf3c80f11b312f11fb0bde81c166af0.png](https://img-blog.csdnimg.cn/img_convert/2bf3c80f11b312f11fb0bde81c166af0.png)
此时该文件夹中很干净,所有编译产生的文件都在中间目录build中(注意此时在终端中运行程序时,也需要使终端cd在中间目录中):
![b41d93ec6e1b7f6a2922600eaecdaeae.png](https://img-blog.csdnimg.cn/img_convert/b41d93ec6e1b7f6a2922600eaecdaeae.png)