本文主要是介绍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用·没用到,我也不清楚。欢迎大神告知。
这篇关于CMake,make,CMakeLists.txt,CMakeFiles之间的关系的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!