CMAKE是一个开源、跨平台的编译、测试和打包工具,它使用比较简单的语言描述编译、安装的过程,输出Makefile或者project文件,再去执行构建。
在linux环境下编写C++程序是没有类似windows下编译器的一键编译和运行的按钮,只能由开发人员进行手动编译、运行;当多人协同开发一个较大的项目时,会产生较多的源代码文件,因此需要说明编译的顺序,例如需要先编译什么 ,再编译什么,这个过程称之为构建(Build);为了减免这种繁琐而且复杂的劳动力,出现了make工具及makefile文件,makefile文件可以帮助我们很快的编译大量文件,最终形成可执行文件;但是编写Makefile文件的语法较为复杂,尤其是对于大型的复杂项目,编写Makefile的过程则更为困难。
而Cmake为我们提供了一套简洁的语法去定义构建的流程,CMake定义构建过程的文件称为CMakeLists.txt。在使用IDE进行开发的过程中,这个流程一般是由IDE自动完成的,开发者基本不需要干预,但是如果开发者需要控制构建的细节,则需要自己定义构建过程。
cmake 在执行时,会生产大量临时文件,如果直接在代码根目录执行cmake .命令,相信会看到比代码本身更多的临时文件。所有的临时文件直接出现在代码源文件夹,非常的不美观,而解决这种情况,一般的操作是外部构建。
外部构建,通过在源文件夹外创建一个新的用于放置编译中间文件的文件夹,所有生成的工程管理临时文件、编译临时文件、编译最终生成文件都在该文件夹中。 一般情况下外部构建的操作如下:
mkdir build # 创建一个新文件夹
cd ./build # 进入该文件夹路径(源代码目录在和build同级)
cmake .. # 构建工程管理临时文件
make # 编译
make install # 安装编译好的工程到指定路径
所有的临时文件都放置的在 build 文件夹中,如果需要调整,直接将 build 删除即可。对于版本管理工具git来讲,可以直接在.gitignore文件中加入一行build/以屏蔽对 build 文件夹的版本控制。build 文件夹内生成的文件如下图所示。
CMake之Option使用简介_cmake option_奔跑的码仔的博客-CSDN博客
HELLO CMAKE-内部构建、外部构建 - 掘金