栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

浅谈对Cmake的理解

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

浅谈对Cmake的理解

在学习云计算相关知识的时候遇到了这个概念,查找资料后有了一定的了解,记录下来,一方面增加自己的理解,另一方面希望能够帮助到有需要的人。

目录
      • 一 CMake定义
      • 二 网上高赞的理解
        • 1. CMake
        • 2. makefile
        • 3. 二者关系
        • 4. CMake的Helloworld示例
      • 三 个人理解
      • 四 总结

一 CMake定义

CMake是一个跨平台、开源的构建系统。它是一个集软件构建、测试、打包于一身的软件。比如它能根据源码和预先配置好的构建配置文件构建出Visual Studio的.sln文件或者Linux中的Makefile、启动编译过程、启动单元测试、打包可执行文件及依赖到指定目录。

简单来说它是用来构建项目的。

二 网上高赞的理解 1. CMake

假如我们有一个深度学习框架的部分工程列表,里面有超过40个互相调用的工程共同组成,一些用于生成库文件,一些用于实现逻辑功能。他们之间的调用关系复杂而严格,如果我想在这样复杂的框架下进行二次开发,显然只拥有它的源码是远远不够的,还需要清楚的明白这几十个项目之间的复杂关系,在没有原作者的帮助下进行这项工作几乎是不可能的。

即使是原作者给出了相关的结构文档,对新手来说建立工程的过程依旧是漫长而艰辛的,因此CMake的作用就凸显出来了。原作者只需要生成一份CMakeLists.txt文档,框架的使用者们只需要在下载源码的同时下载作者提供的CMakeLists.txt,就可以利用CMake,在”原作者的帮助下“进行工程的搭建。

2. makefile

一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。

3. 二者关系

Cmake是用来makefile的一个工具:读入所有源文件之后,自动生成makefile。

4. CMake的Helloworld示例

CMake通过CMakeLists.txt文件配置项目构建过程,该文件通常位于项目根目录。其他还有xxx.cmake格式的文件,这种文件的功能类似C++中的头文件,可以被include进CMakeLists.txt中,实现对构建配置的扩展。

(1) 项目目录、配置CMakeLists.txt

  • 创建src目录,包含hello.cpp文件;
  • 根目录创建CMakeLists.txt;
  • build目录是空目录,执行构建过程(构建过程会产生一些配置文件,为了防止污染源码,在一个独立文件夹中构建);

    上图CMakeLists.txt文件解释:
  • project(hello) 配置项目名为hello;
  • add_executable(hello src/hello.cpp) 配置生成可执行文件,可执行文件名为hello,参与链接的文件是src/hello.cpp;

(2) 生成解决方案
通过使用cmake命令,指定根目录的CMakeLists.txt位置,生成项目解决方案。


以上便生成了Visual Studio的解决方案hello.sln和hello项目的工程配置hello.vcxproj。

(3) 构建
上一步只是生成了解决方案,我们想要的hello.exe还没有生成。可以用图形界面打开hello.vcproj生成,也可以直接通过命令行生成。

在build目录执行 cmake --build .:

三 个人理解
  • 简单理解项目的开发过程:构建–>编译–>测试–>打包部署;
  • 源代码(只是肉体,不代表项目,因为它没有项目模块之间的依赖关系)、CMakeLists.txt文档 + Cmake命令 → makefile,这是一个构建项目的过程;
  • makefile记录了编译规则,通过make指令可以对项目进行编译;
  • 后续过程略。
四 总结

如有见解,欢迎交流;如有侵权,请联系我删除。

参考文章:

  • CMake从入门到入门
  • CMake是什么?有什么用?

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/291526.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号