CMake作用:CMake 是一个跨平台的构建系统,主要用于自动化管理软件的编译过程。它能够帮助开发者生成适合不同操作系统和编译器的构建文件(如 Makefile、Visual Studio 项目文件等),简化复杂项目的构建和依赖管理。
直接以一个简单的c++程序为例,说明CMake的使用。
首先创建一个文件夹hello,然后在该文件夹下创建写一个hello.cpp,代码如下:
using namespace std;
int main()
{
cout <<"Hello world!"<< endl;
return 0;
}
然后创建CMakeLists.txt文件,CMakeLists.txt文件的作用是告诉cmake要对这个文件夹(hello文件夹)下的文件做什么,名字一定不能错,不然可能会构建失败。在CMakeList.txt文件中写入以下内容:
cmake_minimum_required(VERSION 2.8) #指定CMake的最小版本要求
project(helloworld) #定义工程名称
add_executable(helloworld helloworld.cpp) #生成可执行文件
接下来打开终端,输入:
cmake .
还有一种构建方式是在主程序同级目录下,再新建一个build文件夹,进入此文件夹,使用cmake …构建文件,这样做是为了在构建过程中生成的构建文件,全部都在build文件夹中,便于管理。
构建如图:
在此过程中,多了三个文件和一个文件夹:
CMakeCache.txt文件:
这是一个缓存文件,用于存储CMake过程中的配置信息。包括了查找的库,、头文件、编译器路径、变量值等信息。当再次运行CMake 时,CMake 会首先检查这个文件,以便快速获取之前的配置,避免重复查找和检查。显著加快配置时间。可以手动编辑这个文件,修改一些配置参数(如编译选项、库路径等),或者在命令行中使用 -D 选项设置变量,CMake 会将其写入缓存。
内容片段如图:
cmake_install.cmake:
cmake_install.cmake 文件包含了安装目标和规则,用于指定在运行 make install 时应该执行哪些操作。比如将可执行文件、库文件、头文件等复制到系统的指定位置(如 /usr/local/bin、/usr/local/lib 等)。
内容片段如图:
CMakeFiles 文件夹:
MakeFiles 文件夹包含 CMake 生成过程中的临时文件和中间文件。这些文件用于管理构建过程的各种信息,包括依赖关系、目标信息、生成的 Makefile 等。该文件夹中有多个文件,支持 CMake 的并行构建特性。若构建过程出现错误,可以在 CMakeFiles 文件夹中找到日志和其他调试信息,帮助定位问题。
其子文件如图所示:
Makefile文件:
这个是核心文件,它定义了如何编译和链接程序的规则。CMake 在生成 Makefile 文件时,会根据项目的配置和文件结构自动创建相应的 Makefile。
Makefile 包含了一系列指令,告诉 make 工具如何编译和链接源代码文件,生成可执行文件或库。
通过定义不同的目标(targets),Makefile 允许用**通过简单的命令(如 make)**来自动执行复杂的构建过程,无需手动输入每个编译命令。
代码片段如图:
接下来输入:
make
目录中出现了一个可执行程序
运行可执行程序。
./helloworld
顺利执行。
整个过程来看,只需要维护一个CMakeLists.txt文件即可。
这样做有一个问题就是主程序和构建过程生成的文件混在了一起,不容易删除。如前面所述,可以新建一个build文件夹,然后在该文件夹下进行构建。命令如下:
mkdir build
cd build
cmake ..
make
此时可执行程序以及cmake生成的所有文件都在build目录下如图:
主目录下没有任何生成文件。