前言:
笔者以前写程序一直在看网上的教程写cmakelists,能生成文件就不会管其他的,但日益复杂的debug需求要求我明白它到底在干什么,它的工作流程,以及它生成了什么。而网上大家都是在教你怎么写出一个cmakelists,并没有讲到其工作具体内容,所以用了查到一部分资料,记录下来
正文:
1.从定义的角度来说参考百度百科的介绍
——“CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。”
cmake是一款针对跨平台工作情景所创造的自动化构建工具,而它的工作,简而言之就是通过调用各种已有的编译工具集去生成可执行文件或链接库。
- 而从需求——解决方案的角度来考虑,Linux早期开发中,并没有类似windows中的VS这样可以一键编译运行的IDE,都是开发者手动使用gcc之类的工具编译,运行,所以出现了make指令,可以快速编译大量文件,同时确定编译顺序(这个过程称为构建),但它需要书写一种规则文件,即makefile,而在多平台协同情况下,如果项目较大,需要一个一个编写makefile,而且makefile通常依赖于当前的编译平台,而且编写makefile的工作量比较大,解决依赖关系时也容易出错。
- 所以cmake出现了,它为我们提供了一种更简洁,更高效的方式去管理我们的代码,cmake可以自动生成makefile文件,解放了许多劳动力,并且可以根据相对路径寻找依赖的库,简化了环境配置的流程,但这也依赖某种规则文件,即CMakeLists,需要手动编写。
- 我们可以发现,cmake并不执行编译的过程,而是调配已有资源来编译,这个过程和make类似,所以就像层层分管的领导一样,make指导gcc等工具进行编译,而自身又受cmake的指导,在笔者使用cmake过程中发现修改程序后并不需要重新cmake,而是只需要重新make,其原因就是cmake最终输出makefile或者project文件,而make输出可执行文件,其中make指令的工作大概是确定那些文件有了修改,并且重新编译已经修改的部分(日后有时间再详细写这方面)。
接下来我们从cmake生成的文件来分析它的工作

Cmakecache.txt
Cmakecache.txt文件是cmake指令生成的缓存文件,它储存了cmake产生的各种变量(例如上文提到的已经找到的路径),其中文介绍也不多,但打开可以看到它的作用
# This is the CMakeCache file.
# For build in directory: /home/skkac/match
# It was generated by CMake: /usr/bin/cmake
# You can edit this file to change values found and used by cmake.
# If you do not want to change any of the values, simply exit the editor.
# If you do want to change a value, simply edit, save, and exit the editor.
例子:图中文件使用了opencv的库,可以看到cmakecache中有这样一段:
//Details about finding OpenCV
FIND_PACKAGE_MESSAGE_DETAILS_OpenCV:INTERNAL=[/usr/local][v3.4.5()]
Cmake_install.cmake
这个文件是指导与下载相关事项的文件,内部用if语句对不同情况做出了相应的处理

CMakeFiles:
这个文件夹内部文件的中文资料很少,大家遇到它们往往是报错,所以并不会经常用到
目前已知的有两个makefile文件,以及用来确定可调用功能的feature test文件(有c,c++,和二进制三种版本),用来检查cmakelists编写正确与否的cmake.cmake_cache文件,储存部分makefile生成的文件的CmakeDirectoryformation.cmake文件,储存链接文件路径的TargetDirectotxttxt文件。
剩下的部分没有办法直接找到,待日后上cmake官网查询后更新相关内容吧
本文深入探讨了CMake的工作流程,它作为跨平台的构建工具,简化了makefile的编写并管理代码依赖。CMake通过CMakeLists.txt文件生成makefile或项目文件,指导编译过程。Cmakecache.txt存储编译变量,CMakeInstall.cmake处理下载,CMakeFiles目录包含编译细节。CMake使得复杂项目的构建和维护更为便捷。

2481

被折叠的 条评论
为什么被折叠?



