CMake是什么?具体有什么作用?
文章目录
- CMake——高级编译配置工具
- CMake定义
- CMake缩写
- CMake应用场景
- CMake主要功能
- 1、配置和生成各大平台的工程(vs的vcxproj,Qt的Pro):
- 2、生成makefile文件
- 补充:makefile介绍
- 什么是makefile?
- 为什么使用makefile:
- 总结:CMake和makefile
CMake——高级编译配置工具
CMake定义
CMake是一个跨平台的编译(Build)工具,可以用简单的语句来描述所有平台的编译过程。
CMake能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。
CMake 不仅可以编译源代码、制作程序库、产生适配器(wrapper)、还可以用任意的顺序建构执行档。CMake 支持 in-place 建构(二进档和源代码在同一个目录树中)和 out-of-place 建构(二进档在别的目录里),因此可以很容易从同一个源代码目录树中建构出多个二进档。CMake 也支持静态与动态程式库的建构。
CMake缩写
“CMake”这个名字是“cross platform make”的缩写。虽然名字中含有“make”,但是CMake和Unix上常见的“make”系统是分开的,而且更为高阶。
CMake应用场景
假如我们有一个深度学习框架的部分工程列表,里面有超过40个互相调用的工程共同组成,一些用于生成库文件,一些用于实现逻辑功能。他们之间的调用关系复杂而严格,如果我想在这样复杂的框架下进行二次开发,显然只拥有它的源码是远远不够的,还需要清楚的明白这几十个项目之间的复杂关系,在没有原作者的帮助下进行这项工作几乎是不可能的。
即使是原作者给出了相关的结构文档,对新手来说建立工程的过程依旧是漫长而艰辛的,因此CMake
的作用就凸显出来了。原作者只需要生成一份CMakeLists.txt文档
,框架的使用者们只需要在下载源码的同时下载作者提供的CMakeLists.txt
,就可以利用CMake
,在”原作者的帮助下“进行工程的搭建。
打个更通俗易懂的比喻,小利在路边捡瓶盖赚了500万准备买房,但是小利这一麻袋的5毛、一块、十块、五十、一百售楼处的小姐姐嫌麻烦不想收这些钱,那怎么办呢?小姐姐建议小利把钱拿到银行去换成一张银行卡,然后直接来刷卡就行啦!CMake这里就扮演银行的角色,帮你去整理你的资产。
CMake主要功能
CMake主要有两大功能:
1、配置和生成各大平台的工程(vs的vcxproj,Qt的Pro):
比如设置输出目录,设置编译对象的debug后缀,设置源码在工程中的那个文件夹(Filter),配置需要依赖的第三方的头文件目录,库目录等等属性。
2、生成makefile文件
计算机编译源文件的时候是一条指令一条指令的发送给编译器执行的,这样效率很低下,所以就产生了一种文件,把所有的命令写到一个文件中,这个文件就是makefile
。CMake
生成了这个makefile
之后,各大平台的编译器都会拿到这个makefile
然后解析它。将他的命令解析出来一条一条执行。
说到这又不懂了,makefile又是什么呀?再补充一下makefile的相关介绍
补充:makefile介绍
什么是makefile?
或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。
特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。因为,makefile关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。
make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。
关于Makefile的超级简单应用可以参考我的另一篇博文(只适合入门学习编写的博文):https://blog.csdn.net/weixin_45525272/article/details/121109558
为什么使用makefile:
对于一个大型软件,其编译、维护是一个复杂而耗时的过程。它涉及到大量的文件、目录,这些文件可能是在不同的时间、由不同的人、在不同的地方分别写的,其中一些是程序,有些是数据,有些是文档,有些是衍生文件。
甚至参与开发的人员也不一定清楚所有文件的细节,包括如何处理它们。此外,构成软件的文件数目可能达到成百上千,甚至成千上万个,开发过程中当修改了少量几个文件后,往往只需要重新编译、生成少数几个文件。有效地描述这些文件之间的依赖关系以及处理命令,当个别文件改动后仅执行必要的处理,而不必重复整个编译过程,可以大大提高软件开发的效率。
总结:CMake和makefile
简单总结一下:Cmake
是用来makefile
的一个工具,读入所有源文件之后,自动生成makefile
。
CMake是什么?具体有什么作用?相关推荐
- 嵌入式linux学习路径--新手入门篇
嵌入式linux如何入门? 前言 基础概念 计算机与嵌入式的关系 操作系统是什么? 程序 网络 ARP IP ICMP TCP UDP DNS DHCP FTP HTTP linux系统命令 目录相关 ...
- 基于ROS的Most Stars开源代码汇总(自动驾驶汽车+RGBDSLAMv2+ROS2+人识别与跟踪等)
Star 200+ https://github.com/CPFL/Autoware 用于城市自主驾驶的开源软件. http://www.tier4.jp/ Autoware 用于城市自主驾驶的集成开 ...
- Autoware-用于城市自主驾驶的开源软件
Star 200+ https://github.com/CPFL/Autoware 用于城市自主驾驶的开源软件. http://www.tier4.jp/ Autoware 用于城市自主驾驶的集成开 ...
- 《视觉SLAM十四讲》(第二版)程序
目录 clone github下代码 CH2 IDE的使用 CMake CH3 Eigen CH4 Sophus CH5 OpenCV clone github下代码 由于网络等问题,会导致git c ...
- vscode cmake-tools 的作用,以及和cmake的联系
vscode cmake-tools 的作用,以及和cmake的联系 camke tools 是 vscode 中的一个插件,顾明思意,它和cmake有关,他是vscode中编译工程的工具. linu ...
- c语言项目为什么要build?(gcc、makefile、cmake(qmake)、CMakeLists.txt)(qmake、cmake、qbs区别解析)(qmake还是cmake,mingw作用)
搞不太懂gcc和cmake(qmake)等的区别 1.gcc是GNU Compiler Collection(就是GNU编译器套件),也可以简单认为是编译器, 它可以编译很多种编程语言(括C.C++. ...
- 【C基础】Makefile(含.phony的作用)和CMake
目录 1. Makfile 1.1.基础 1.2. 伪对象.PHONY 1.3. 变量 1.3.1. 普通变量 1.3.2. 自动变量 1.4.依赖第三方库 2. CMake Makefile 是编译 ...
- Cmake 交叉编译
转载自 http://zhixinliu.com/2016/02/01/2016-02-01-cmake-cross-compile/ CMake交叉编译 CMake的使用,以及如何将一个项目移植到A ...
- cmake 注意事项
1. add_subdirectory()调用 CMake将在每次add_subdirectory()调用时创建一个新的变量作用域,因此这个参数最好的用法是放在cmaklists的最后使用,这样的话创 ...
最新文章
- Ubuntu下修改DNS重启也能用的方法
- 什么是pretext tasks?
- Xcode7常见问题汇总
- Pycharm 入门问题
- 无连接可靠传输_FPC连接器的特点以及弹片微针模组的作用
- windos 服务怎么写_周岁邀请函怎么写
- rzsz上传下载命令
- 01分数规划解析(转载)
- 【统计学】基本Stata使用手册:合集
- Google Scholar 谷歌学术文献检索技巧总结
- inno setup 卸载注册表_Inno Setup Compiler卸载时删除注册表
- 【文本挖掘】关键词提取
- 用户行为监控(Piwik)
- Solidwork仿真总结(Motion,Xpress、Simulation,Flow Simulaiton)
- 弘辽科技:惊!原来吸引淘宝买家眼球的标题是这么写出来的!
- 国外甲醇汽油的应用概况
- matlab实现牛顿下山法(下山过程)
- Auto CAD Mac版基础入门必看
- 前端ES6的语法整理
- 罗马音平假名中文可复制_【日语歌曲】恋爱循环罗马音+日语+中文
热门文章
- php编译打包,解压即用,Ubuntu上Nginx/Apache/PHP编译打包
- windows平台下发布QT程序
- .equ .long表示什么意思?
- Py之alepython:alepython库的简介、安装、使用方法之详细攻略
- 基于macd、kdj、ma技术指标分析股票多空方向——应用开发2 获取股票历史数据
- UI培训分享:零基础学UI自学和报班哪个好
- matlab如何进对图像进行透视变换,如何根据已知的内在和外在参数在Matlab中进行透视校正?...
- 腾讯云开发CloudBase之静态网站托管
- OpenCL编译方式技术分析
- profinet通讯 西门子PROFINET 开发 远程IO 有实际项目产品应用经验 提供整套方案