首页 > 其他分享 >Make、Makefile、Cmake、QMake 的区别

Make、Makefile、Cmake、QMake 的区别

时间:2023-04-14 17:35:20浏览次数:104  
标签:文件 cmake Qt makefile Make Makefile qmake Cmake make

本文由 简悦 SimpRead 转码, 原文地址 blog.csdn.net

简介: make makefile cmake qmake都是什么,有什么区别?

文章目录

本博文的简述or解决问题?

make makefile cmake qmake都是什么,有什么区别?

​ 查了一下好像是编译用的,既然是编译为什么我们不用g++ javac 来编译呢?我猜答案是方便一点,但是具体方便在哪呢,请明示。还有它们之间如果有相似性的话,也帮我比较一下吧,谢谢各位大神。

觉得写的比较好,所以在这里搬运过来了

答一(比较写的好):

作者:辉常哥

链接:https://www.zhihu.com/question/27455963/answer/89770919

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

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

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这些一般它都能帮你弄好了,你只需要按一下那个三角形。(以前从来没研究过这个邪恶的三角形,所以这那天翻来这两篇文章)

12.接着是qmakeqmake是什么,先说一下Qt这个东西。Qt是跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。简单的说就是C++的第三方库,使用这个库你可以很容易生成windowsLinuxMAC os等等平台的图形界面。现在的Qt还包含了开发各种软件一般需要用到的功能模块(网络,数据库,XML,多线程啊等等),比你直接用C++(只带标准内裤那种)要方便和简单。

13.你可以用Qt简简单单就实现非常复杂的功能,是因为QtC++进行了扩展,你写一行代码,Qt在背后帮你写了几百上千行,而这些多出来的代码就是靠Qt专有的moc编译器(The Meta-Object Compiler)和uic编译器(User Interface Complier)来重新翻译你那一行代码。问题来了,你在进行程序编译前就必须先调用mocuicQt源文件进行预处理,然后再调用编译器进行编译。上面说的那种普通makefile文件是不适用的,它没办法对qt源文件进行预处理。所以qmake就产生了。

14.qmake工具就是Qt公司制造出来,用来生成Qt 专用makefile文件,这种makefile文件就能自动智能调用mocuic对源程序进行预处理和编译。qmake当然必须也是跨平台的,跟cmake一样能对应各种平台生成对应makefile文件。

15.qmake是根据Qt 工程文件(.pro)来生成对应的makefile的。工程文件(.pro)相对来说比较简单,一般工程你都可以自己手写,但是一般都是由Qt的开发环境 Qt Creator自动生成的,你还是只需要按下那个邪恶三角形就完事了

16.还没有完,由于qmake很简单很好用又支持跨平台,而且是可以独立于它的IDE,所以你也可以用在非Qt工程上面,照样可以生成普通的makefile,只要在pro文件中加入CONFIG -= qt 就可以了。

  1. 这样qmakecmake有什么区别?

​ 不好意思,cmake也是同样支持Qt程序的,cmake也能生成针对qt 程序的那种特殊makefile

​ 只是cmakeCMakeLists.txt 写起来相对与qmakepro文件复杂点。

qmake 是为 Qt 量身打造的,使用起来非常方便,但是cmake功能比qmake强大。

​ 一般的Qt工程你就直接使用qmake就可以了,cmake的强大功能一般人是用不到的。

​ 当你的工程非常大的时候,又有qt部分的子工程,又有其他语言的部分子工程,据说用cmake会 方便,我也没试过。

答二(图很好):

作者:玟清

链接:https://www.zhihu.com/question/27455963/answer/36722992

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  1. make 是用来执行makefile

  2. makefile是类unix环境下(比如Linux)的类似于批处理的"脚本"文件。其基本语法是: 目标+依赖+命令,只有在目标文件不存在,或目标比依赖的文件更旧,命令才会被执行。由此可见,makefile和make可适用于任意工作,不限于编程。比如,可以用来管理latex。

  3. makefile+make可理解为类unix环境下的项目管理工具,但它太基础了,抽象程度不高,而且在windows下不太友好(针对visual studio用户),于是就有了跨平台项目管理工具cmake

  4. cmake是跨平台项目管理工具,它用更抽象的语法来组织项目。虽然,仍然是目标,依赖之类的东西,但更为抽象和友好,比如你可用math表示数学库,而不需要再具体指定到底是math.dll还是libmath.so,在windows下它会支持生成visual studio的工程,在linux下它会生成makefile,甚至它还能生成eclipse工程文件。也就是说,从同一个抽象规则出发,它为各个编译器定制工程文件。

  5. cmake是抽象层次更高的项目管理工具,cmake命令执行的CMakeLists.txt文件

  6. qmake是Qt专用的项目管理工具,对应的工程文件是.pro,在Linux下面它也会生成makefile,当然,在命令行下才会需要手动执行qmake,完全可以在qtcreator这个专用的IDE下面打开.pro文件,使用qmake命令的繁琐细节不用你管了。

总结一下,make用来执行makefilecmake用来执行CMakeLists.txtqmake用来处理*.pro工程文件。makefile的抽象层次最低,cmakeqmakeLinux等环境下最后还是会生成一个makefilecmakeqmake支持跨平台,cmake的做法是生成指定编译器的工程文件,而qmake完全自成体系。

具体使用时,Linux下,小工程可手动写makefile,大工程用automake来帮你生成makefile,要想跨平台,就用cmake。如果GUI用了Qt,也可以用qmake + *.pro来管理工程,这也是跨平台的。当然,cmake中也有针对Qt的一些规则,并代替qmake帮你将qt相关的命令整理好了。

另外,需要指出的是,makecmake主要命令只有一条,make用于处理makefile,cmake用来转译CMakeLists.txt,而qmake是一个体系,用于支撑一个编程环境,它还包含除qmake之外的其它多条命令(比如uicrcc,moc)。

上个简图,其中cl表示visual studio的编译器,gcc表示linux下的编译器

参考博文:

因为有着热心网友的无私分享,

make makefile cmake qmake都是什么,有什么区别?

Qt编程中qmake的使用详解

系列地址:

QtExamples

欢迎 starfork 这个系列的 QT / DTK 学习,附学习由浅入深的目录。

标签:文件,cmake,Qt,makefile,Make,Makefile,qmake,Cmake,make
From: https://www.cnblogs.com/cps666/p/17319006.html

相关文章

  • Cmake 学习记录
    https://cmake.org/documentation/官网有相关的文档,可以以官方的文档进行了解。首先我们先了解一下Cmake的大致使用目的,以前使用过qt,qt有Qmake这个文件,让我大致了解了过程,就是有这么一份文件,配置了相关属性,然后利用工具,将目标工程编译打包。引用下官网的简介:CMakeisanopen-sou......
  • ubuntu 16.04 下 安装CMAKE 及VCPKG~~
    1安装CMAKE1.1wgethttps://github.com/Kitware/CMake/releases/download/v3.21.4/cmake-3.21.4.tar.gz1.2tar-zxvfcmake-3.21.4.tar.gz1.3进入目录后:./bootstrap,如果提示没有OPENSSL,重新安装OPENSSL或者如下安装LIBSSL-DEV//更新apt-get下载源节点sudoapt-getupdat......
  • cmake开发环境--msys2搭建
    前言在日常移植算法的过程中,由于MicrosoftVisualStudio无法安装,导致需要自己搭建个C语言开发环境。最开始使用VScode上的通过C/C++直接编译,虽然简单方便,但对于多文件,多路径下的,则需要编写task.json文件编译C文件,增加一个文件,就需要写入编译,过于麻烦。后使用小熊猫C++,虽然集成......
  • linux开发之Make
    简述代码变成可执行文件,叫做编译(compile);先编译这个,还是先编译那个(即编译的安排),叫做构建(build)。Make是最常用的构建工具,他根据makefile来行动。makefile是一个名字叫Makefile(或makefile)的文件,它一堆规则的定义,它定义了具体该怎么编译,链接等操作。当源代码有几十上百时,手动输......
  • Tool-CMake
    Tool-CMakehttps://cmake.org/https://cmake.org/download/https://cmake.org/documentation/https://cmake.org/runningcmake/Book:MasteringCMake3.1EditionbyKenMartin(Author),BillHoffman(Author)https://github.com/Kitware/CMakehttps://gitlab.......
  • cmake学习
    -DCMAKE_BUILD_TYPE=Debug和Release有什么区别-DCMAKE_BUILD_TYPE是用于指定CMake构建类型的CMake变量。它有两个常见的值,即"Debug"和"Release",它们分别用于在构建C++/C项目时指定不同的构建类型。区别如下:Debug构建类型:Debug构建类型用于在开发阶段进行调试和测......
  • CMake学习记录——下
    转载来自:https://subingwen.cn/cmake/CMake-advanced/1.嵌套的CMake如果项目很大,或者项目中有很多的源码目录,在通过CMake管理项目的时候如果只使用一个CMakeLists.txt,那么这个文件相对会比较复杂,有一种化繁为简的方式就是给每个源码目录都添加一个CMakeLists.txt文件(头文......
  • cmake小贴士
    visualstudio环境里,可以用IDE生成CMakePreset.json。 Tools > Options > CMake > General.有CMake集成管理界面, 当CMakeLists.txt目录中,同时有CMakePreset.json和CMakesettings.json时,vside只认第一个。 在vs里,Useaforwardslash(/)forpathsin CMak......
  • Macos 如何安装 cmake
    方法一:brewbrewinstallcmake用brew安装是一个万能方法,但是cmake版本迭代太快。目前CLion最高支持cmake24.x版本,而cmake目前是26.x。每次用brew更新cmake后都要在CLion中重新指定cmake位置,比较麻烦。方法二:官网下载dmg进入https://cmake.org/files/v3.......
  • CentOS7/RHEL7 pacemaker+corosync高可用集群搭建
    CentOS7/RHEL7pacemaker+corosync高可用集群搭建一、集群信息二、集群搭建1、制作软件源2、主机基础配置3、集群基础环境准备4、集群资源准备5、资源配置6、constraint配置7、stonith配置8、集群功能验证三、集群常用命令及作用1、验证群集安装2、查看群集资源3、使......