CMake 入门与进阶

Posted 行稳方能走远

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CMake 入门与进阶相关的知识,希望对你有一定的参考价值。

目录

在前面两篇内容中,我们编写了很多示例程序,但这些示例程序都只有一个.c 源文件,非常简单。所以,编译这些示例代码其实都非常简单,直接使用GCC 编译器编译即可,连Makefile 都不需要。但是,在实际的项目中,并非如此简单,一个工程中可能包含几十、成百甚至上千个源文件,这些源文件按照其类型、功能、模块分别放置在不同的目录中;面对这样的一个工程,通常会使用make 工具进行管理、编译,make 工具依赖于Makefile 文件,通过Makefile 文件来定义整个工程的编译规则,使用make 工具来解析Makefile 所定义的编译规则。

Makefile 带来的好处就是——“自动化编译”,一旦写好,只需要一个make 命令,整个工程完全按照
Makefile 文件定义的编译规则进行自动编译,极大的提高了软件开发的效率。大都数的IDE 都有这个工具,譬如Visual C++的nmake、linux 下的GNU make、Qt 的qmake 等等,这些make 工具遵循着不同的规范和标准,对应的Makefile 文件其语法、格式也不相同,这样就带来了一个严峻的问题:如果软件想跨平台,必须要保证能够在不同平台下编译,而如果使用上面的make 工具,就得为每一种标准写一次Makefile,这将是一件让人抓狂的工作。

而cmake 就是针对这个问题所诞生,允许开发者编写一种与平台无关的CMakeLists.txt 文件来制定整个工程的编译流程,再根据具体的编译平台,生成本地化的Makefile 和工程文件,最后执行make 编译。

因此,对于大多数项目,我们应当考虑使用更自动化一些的cmake 或者autotools 来生成Makefile,而不是直接动手编写Makefile。

本章我们便来学习cmake,本章将会讨论如下主题内容。
⚫ cmake 是什么?
⚫ cmake 和Makefile 之间的关系
⚫ 如何使用cmake

cmake 简介

cmake 是一个跨平台的自动构建工具,前面导语部分也已经给大家介绍了,cmake 的诞生主要是为了解决直接使用make+Makefile 这种方式无法实现跨平台的问题,所以cmake 是可以实现跨平台的编译工具,这是它最大的特点,当然除了这个之外,cmake 还包含以下优点:

⚫ 开放源代码。我们可以直接从cmake 官网https://cmake.org/下载到它的源代码;
⚫ 跨平台。cmake 并不直接编译、构建出最终的可执行文件或库文件,它允许开发者编写一种与平台无关的CMakeLists.txt 文件来制定整个工程的编译流程,cmake 工具会解析CMakeLists.txt 文件语法规则,再根据当前的编译平台,生成本地化的Makefile 和工程文件,最后通过make 工具来编译整个工程;所以由此可知,cmake 仅仅只是根据不同平台生成对应的Makefile,最终还是通过make工具来编译工程源码,但是cmake 却是跨平台的。
⚫ 语法规则简单。Makefile 语法规则比较复杂,对于一个初学者来说,通常并不那么友好,并且
Makefile 语法规则在不同平台下往往是不一样的;而cmake 依赖的是CMakeLists.txt 文件,该文件的语法规则与平台无关,并且语法规则简单、容易理解!cmake 工具通过解析CMakeLists.txt 自动帮我们生成Makefile,这样就不需要我们自己手动编写Makefile 了。

cmake 和Makefile

直观上理解,cmake 就是用来产生Makefile 的工具,解析CMakeLists.txt 自动生成Makefile:

除了cmake 之外,还有一些其它的自动构建工具,常用的譬如automake、autoconf 等,有兴趣的朋友可以自己了解下。

cmake 的下载

cmake 的使用方法

以上是关于CMake 入门与进阶的主要内容,如果未能解决你的问题,请参考以下文章

Windows下使用CMake进阶

makefile学习与Cmake进阶

Tornado从入门到进阶 打造支持高并发的技术论坛

cmake教程

[7] CMake总结 - 4 INSTALL

[7] CMake总结 - 4 INSTALL