HELLO CMAKE-内部构建、外部构建

2,152 阅读2分钟

Hello CMake: 最常用的 CMAKE 用法

CMake

CMake是个一个开源的跨平台自动化建构系统,用来管理软件建置的程序,并不依赖于某特定编译器,并可支持多层目录、多个应用程序与多个库。 它用配置文件控制建构过程(build process)的方式和Unix的make相似,只是CMake的配置文件取名为CMakeLists.txt。CMake并不直接建构出最终的软件,而是产生标准的建构档(如Unix的Makefile或Windows Visual C++的projects/workspaces),然后再依一般的建构方式使用。

在Linux上,CMake 通过 CMakeLists.txt 用相较 Makefile 更简单的语法生成 Makefile,之后使用 make 命令进行编译,make install 命令进行安装。

Make 工具除了 CMake 还有个比较好用的的管理 QT 工程的叫做 qmakeqmake 在学习的难度上相较 CMake要小的多,并且有轻量级的IDE QT Creator可以方便进行管理,关于 qmake 的使用,我会在后续的博客更新中讲解。

下面我来为大家介绍下我们在使用 CMake 时最常用的管理方式。

个人如何在 linux 使用 CMake 管理工程

一般没有针对CMake的IDE,我们可以纯手敲,它有点儿像是在写代码,稍微容易点。我通常使用 VSCode或者ATOM等编译器,直接打开工程的根目录,然后便可以看到文件夹下的源代码文件,并且还可以比较简单美观的写代码。

内部构建和外部构建,选择哪个?

cmake 在执行时,会生产大量临时文件,如果直接在代码根目录执行cmake .命令,相信会看到比代码本身更多的临时文件。

如上图,所有的临时文件直接出现在代码源文件夹,非常的不美观,而解决这种情况,一般的操作是外部构建

外部构建,通过在源文件夹外创建一个新的用于放置编译中间文件的文件夹,所有生成的工程管理临时文件、编译临时文件、编译最终生成文件都在该文件夹中。 一般情况下外部构建的操作如下:

mkdir build # 创建一个新文件夹
cd ./build  # 进入该文件夹路径
cmake ..    # 构建工程管理临时文件
make        # 编译
make install    # 安装编译好的工程到指定路径

如上图,所有的临时文件都放置的在 build 文件夹中,如果需要调整,直接将 build 删除即可。对于版本管理工具git来讲,可以直接在.gitignore文件中加入一行build/以屏蔽对 build 文件夹的版本控制。build 文件夹内生成的文件如下图所示。

Reference

  1. 代码样例
  2. CMake Partice
  3. Wikipedia