CMake,make,CMakeLists.txt,CMakeFiles之间的关系

参考https://www.zhihu.com/question/36609459

对于一个只在windows界混的菜鸟程序员,平常用Visual Studio(号称宇宙最强IDE),就能实现新建工程,编写*.cpp,*.h,编译(即build,这里的编译实际包括了编译,汇编,链接等等,见下面截图)

过程神马的都帮你弄好了,按个快捷键(ctrl +shift+B或者F7,好像还可以自定义),Build就开始了。

然而,当我知道CMake后,通常介绍说跨平台特别方便,高手必备技能,晕了。。。

下面只简单说下CMake,make,CMakeLists.txt,CMakeFiles之间的关系

1.gcc是GNU Compiler Collection(就是GNU编译器套件),也可以简单认为是编译器,它可以编译很多种编程语言(括C、C++、Objective-C、Fortran、Java等等)。

2.当你的程序只有一个源文件时,直接就可以用gcc命令编译它。

3.但是当你的程序包含很多个源文件时,用gcc命令逐个去编译时,你就很容易混乱而且工作量大

4.所以出现了make工具
make工具可以看成是一个智能的批处理工具,它本身并没有编译和链接的功能,而是用类似于批处理的方式—通过调用makefile文件中用户指定的命令来进行编译和链接的。

5.makefile是什么?简单的说就像一首歌的乐谱,make工具就像指挥家,指挥家根据乐谱指挥整个乐团怎么样演奏,make工具就根据makefile中的命令进行编译和链接的。

6.makefile命令中就包含了调用gcc(也可以是别的编译器)去编译某个源文件的命令。

7.makefile在一些简单的工程完全可以人工手下,但是当工程非常大的时候,手写makefile也是非常麻烦的,如果换了个平台makefile又要重新修改。

8.这时候就出现了Cmake这个工具,cmake就可以更加简单的生成makefile文件给上面那个make用。当然cmake还有其他功能,就是可以跨平台生成对应平台能用的makefile,你不用再自己去修改了。

9.可是cmake根据什么生成makefile呢?它又要根据一个叫CMakeLists.txt文件(学名:组态档)去生成makefile。

10.到最后CMakeLists.txt文件谁写啊?亲,是你自己手写的。

举例

从源文件

hello.c

生成(构建)可执行文件

hello

需要执行

gcc hello.c -ohello

将上面的命令写到一个文件中,这个文件就是Makefile文件,执行make会执行Makefile中的所有命令

cmake是用来生成Makefile文件的工具,生成Makefile文件的工具不止有cmake,还有autotools。Qt环境下还有qmake

Windows下CMake,CMakeLists.txt的作用

CMakeLists.txt为描述编译链接的规则文件,也就是CMake.exe这个软件是根据解析这个txt文件来生成了VS工程文件(如.sln, vcproject)。个人理解:在windows下,CMakeLists.txt是用来生成组织层次。说白了就是,sln下有多少project,每个project下都有哪些*.cpp,*.h,每个project依赖于哪些其他的project等。

但是,编译,调试代码,还是用VS。即CMake.exe根据CMakeLists.txt生成了*.sln. 用VS打开sln,快捷键ctrl +shift+B。。。

至于Makefile用·没用到,我也不清楚。欢迎大神告知。

 

  • 7
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值