c语言项目为什么要build?(gccmakefilecmake(qmake)CMakeLists.txt)(qmakecmakeqbs区别解析)

Posted Dontla

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言项目为什么要build?(gccmakefilecmake(qmake)CMakeLists.txt)(qmakecmakeqbs区别解析)相关的知识,希望对你有一定的参考价值。

搞不太懂gcc和cmake(qmake)等的区别

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文件谁写啊?亲,是你自己手写的。

11.当然如果你用IDE,类似VS这些一般它都能帮你弄好了,你只需要按一下那个三角形

参考文章:GCC 和 cmake的关系? - 辉常哥的回答 - 知乎

gcc是编译器,其实后还有连接器等make是另外一个程序,根据makefile的指示,
尽可能协调编一个程序套件的编译全过程,一个程序套件可能包好多多源代码,
也可能生成若干二进制文件,还可能指示程序套件的安装程序制作和/或安装过程,
那make就通过调用编译器连接器还有其他外部工具达成这一系列工作。
make不光可以调用gcc编译器,也可以调用javac啊。

makefile精力集中于定义工作流水线。

CMake 是另外一个更高层一点的工具,它的输出是makefile等。
支持使用更简单的语言描述编译安装过程。支持多个makefile系列、VisualStudio等

推荐使用场景:
1 gcc编译器套件:最简单啦,单文件工程比如helloworld直接使用就行了
2 make&makefile : 小中大型工程肯定要用的啦,大型工程的makefile系统不少也都是噩梦般的存在。
适用于工具链【较为统一】的工程中,有一定跨平台能力。
3 CMake:若需要更为广泛的支持多编译工具链更广地跨平台且还不想构建复杂的跨平台makefile系统,
那CMake确实是个很好的选择,由CMake来先编译出不同平台的makefile工程,
而CMakeLists.txt集中声明描述下工程组件的关系即可。

参考文章:GCC 和 cmake的关系? - 任卫的回答 - 知乎

在这里插入图片描述
总而言之:
cmake是用来build项目的,
gcc是小打小闹,适用于单文件编译(不做后面链接,汇编做不做不知道)
makefile先不管它,估计是cmake的祖先

另外,在 qt creator 新建项目选择 build 工具时,会让你选择:
在这里插入图片描述
以下是关于qmake、cmake、qbs的讲解,引用自:浅谈Qt的编译方式:qmake/cmake/qbs及qbs被弃用的原因,一般我们就选择cmake就行了

1、Qbs简介

https://doc.qt.io/qbs/qml-qbsmodules-qbs.html

https://blog.csdn.net/qq_34139994/article/details/98478648

QBS(Qt Build Suite)同 qmake、cmake 之类一样都是构建工具。
QBS 号称是新一代的构建工具,比qmake编译速度更快。

和qmake不一样,qbs没有绑定Qt版本,它从项目文件的高级项目描述中生成一个正确的编译表(依赖表)。
而传统的MakeFile生成工具比如qmake和CMake生成了makefile文件,然后将实际的命令留给make或者ninja这样的工具去执行。
Qbs的另一方面就是充当了并行生成与直接调用编译器、连接器以及其他工具的角色,非常像SCons和Ant做的事情。
 

2、Qt官方声明:因市场原因,弃用Qbs

https://www.qt.io/blog/2018/10/29/deprecation-of-qbs

Qt公司一直在为Qt程序支持三种不同的构建系统。对于Qt用户,qmake是当前使用最广泛的构建系统。
CMake是第二名,并且越来越受欢迎。第三名是Qbs,采用率明显降低。
当被问及他们的喜好时,我们的大多数客户都说他们计划将来使用CMake或qmake。

我们已决定弃用Qbs,并重定向资源以增加对CMake的支持。
Qbs将与Qt Creator 4.9一起一直支持到2019年底,最后计划于20194月发布。
Qbs既可以通过商业许可也可以通过开源许可获得,我们很高兴继续为Qt Project社区提供进一步开发的基础设施。

总结要点:

Qbs将继续得到支持,直到2019年底
最新的Qbs版本将于20194月发布
Qbs继续与即将推出的Qt Creator 4.8和Qt Creator 4.9一起使用
Qt项目下将提供Qbs库和工具,以供社区进一步开发
对qmake的支持将继续不受影响
对CMake的支持将得到改善
从长远来看,我们计划切换到CMake来构建Qt本身
Qt Creator中的CMake支持将得到进一步改善
弃用Qbs使我们能够显著改善CMake支持。我们相信这一变化将帮助越来越多的客户喜欢使用CMake构建系统。
CMake在Qt以外的广泛采用以及其积极的开发生态系统也是有益的。

 

3、Qt6将重点支持CMake

cmake的优点是在C ++生态系统中使用非常广泛(KDE以及其他许多应用程序一样),
在许多IDE和其他工具(例如VCPkg,Conan等)中都有非常广泛的支持,
并且知识很多关于生态系统中可用的构建系统。
将其与Qt 6一起使用还意味着我们可以将支持重点放在针对用户的两个构建系统(qmake和cmake)上,而不必在组合中添加第三个。

从长远来看,我们想逐步淘汰qmake来构建Qt本身,而改用CMake。
即使在此之后,qmake仍可用于构建应用程序。
我们当然会继续提供预编译的二进制文件,这是大多数Qt用户所喜欢的。

 

4、结论

(1)Qbs被官方废弃

(2)Qt6使用qmake和cmake构建

(3)Qt未来用cmake取代qmake位置

 

-----

推荐一款强大的C++ IDE,使用CMake构建项目

https://www.jetbrains.com/clion/

以上是关于c语言项目为什么要build?(gccmakefilecmake(qmake)CMakeLists.txt)(qmakecmakeqbs区别解析)的主要内容,如果未能解决你的问题,请参考以下文章

idea编译调用的是哪个程序

Delphi 中全局变量无法被修改

c语言long double 怎么输入,输出阿?

对Jenkinsfile语法说不,开源项目Jenkins Json Build挺你

什么是函数调用?C语言

linux下 如何用NDK生成C语言动态库