在各种开源项目中,经常会发现项目中除了代码源文件,还包含了 CMakeList.txt、 Makefile 文件,在项目的编译时候需要用到的命令有 cmake 、 make。本文主要介绍一下两个文件和命令之间的关系。
cmake, make, CMakeList.txt, Makefile之间的关系
编写程序的大体流程为:
- 用编辑器(vim、emacs等)编写源代码文件(.h、.cpp等);
- 用编译器编译代码生成目标文件(.o等);
- 用链接器连接目标文件生成可执行文件(.exe等)。
一个程序在编写时,可能需要编写很多的代码文件,以及依赖很多第三方的库。在这种情况下,手动依次编译每个文件会变的非常麻烦,效率低下。
make 是一个自动化的批量编译工具,可以实现用一个命令构建整个工程的目的。但是其执行需要依赖一个规则文件,这个文件就是 Makefile。 Makefile 文件里详细描述了构建的细节(文件的依赖关系,编译的先后顺序等)。
对于一个大工程来说,编写 Makefile 文件也是一项非常复杂的事情。
cmake(Cross-platform Make)是一个可以自动生成 Makefile 文件的工具,当然它不只能生成 Makefile ,还能跨平台生成主流IDE(VS, xcode…)构建工程所需的 project 文件。 cmake 的执行同样需要依赖规则文件,这个文件就是 CMakeLists.txt 。
综上所述,大致可以总结 cmake, make, CMakeList.txt, Makefile 之间的关系,如下图所示: