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

转自:

作者:知乎用户
链接:https://www.zhihu.com/question/27455963/answer/89770919
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 

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这些一般它都能帮你弄好了,你只需要按一下那个三角形

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

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

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

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

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

17. 这样qmake和cmake有什么区别?

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

只是cmake的CMakeLists.txt 写起来相对于qmake的pro文件复杂点。

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/435616.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WinCE 字体平滑 ClearType

WinCE 5.0 字体效果糙,英文字体(Zurich)可以在代码里面设置ClearType,中文字体不行。 解决方法: [HKEY_LOCAL_MACHINE\System\GDI] "FontLinkMethods"dword:00000000 [HKEY_LOCAL_MACHINE\System\GDI\Cle…

用ASP.NET 2.0设计网络在线投票系统

一、系统功能设计和数据库设计 1、系统功能设计和数据库设计 1.1 系统功能设计 网络在线投票系统实现的功能比较简单,具体如下: ◎投票项目的管理; ◎添加投票的项目; ◎删除投票的项目; ◎对项目进行投票&#xff1…

Convert.Int32、(int)和int.Parse三者的区别

今天去面试,碰到这样一道题目,回来查了下答案~! Convert.ToInt32、(int)和int.Parse三者的区别: 前者适合将object类类型转换成int类型,如Convert.ToInt32(session["shuzi"]); (int)适合简单数据类型之间的转…

Wince6.0 cleartype

WinCE6.0下显示宋体毛刺很严重,影响显示效果,打开cleartype以后字体显示平滑,但是不知道为什么wince桌面上的中文字体显示乱码,而且自己的引用程序也变的很卡。 开始以为是字库的原因,后来添加了系统的组件以后一切正常…

【转】ubuntu16.04安装配置tftp服务

转自:ubuntu16.04安装配置tftp服务_carspiriter的博客-CSDN博客_ubuntu安装tftp 首先声明:tftp是client客户端,tftpd是server服务器端,d应该指的是daemon。如果你要从别人的tftp服务器端上传/下载东西,就要用到tftp&a…

如何编程得到数据库信息

获取数据库信息&#xff1a;public List<string> GetDatabase(string connectionString) {using (SqlDataAdapter sqlDataAdapter new SqlDataAdapter("SELECT Name FROM Master.sys.SysDatabases WHERE dbid > 4 ORDER BY Name ", connectionStrin…

【转】Dicom中的Image Orientation/Position的理解

转自&#xff1a;Dicom中的Image Orientation/Position的理解 - 知乎 在DICOM中&#xff0c;是通过Image Position和Image Orientation来描述当前的图像和人体坐标系的相对位置的。 打开DCM文件时&#xff0c;会发现下边的两个tag (0020,0032) DS ImagePosition(Patient) &q…

搭建TFS2008的过程及其注意事项

TFS服务端的安装 1、安装windows Server 2003 操作系统 2、打windows Server 2003 sp2 补丁 3、安装iis, 记得选上asp.net &#xff0c;不能选extend homepage 4、访问 Microsoft 网站上的 Windows Update&#xff0c;并安装“高优先级更新程序”组中的所有项 5、装上ms sql2…

【转】矩阵变换坐标系 深入理解

转自&#xff1a;矩阵变换坐标系 深入理解 - 知乎 网址链接&#xff1a;从坐标系图中理解“空间变换” 小谈矩阵和坐标变换 矩阵坐标系变化理解 让我们从一个实际的例子入手&#xff1a;下图是一个用两维的笛卡尔坐标系表示的二维空间。 其中&#xff0c;黑色坐标系 x-y代表…

【转】坐标系变换矩阵推导

转自&#xff1a; 坐标系的变换矩阵推导 1.平移变换 假设存在点(x,y,z)&#xff0c;将x移动a&#xff0c;y移动b&#xff0c;z移动c&#xff0c;到新的点(x′,y′,z′)&#xff0c;则&#xff1a; 中间4x4的矩阵叫变换矩阵。可见&#xff0c;如果要平移坐标&#xff0c;要将坐…

Crystal Report 2008

郁闷的Crystal Report 2008&#xff0c;下午逛了一圈sap网站&#xff0c;Crystal给Sap收购后就没怎么上过他们的网站&#xff0c;像迷宫一下逛了半天才找到下载升级包的地址&#xff0c;备用&#xff0c;也许你看到的时候已经失效了 http://www.sdn.sap.com/irj/boc/crystalrep…

【转】图形流水线中坐标变换详解:模型矩阵、视角矩阵、投影矩阵

转自&#xff1a;图形流水线中坐标变换详解&#xff1a;模型矩阵、视角矩阵、投影矩阵_sherlockreal的博客-CSDN博客_视角矩阵 图形流水线中坐标变换详解&#xff1a;模型矩阵、视角矩阵、投影矩阵 图形流水线中坐标变换过程模型矩阵&#xff1a;模型局部坐标系和世界坐标系之…

set row count

SET ROWCOUNT 使 Microsoft&reg; SQL Server 在返回指定的行数之后停止处理查询。 语法 SET ROWCOUNT { number | number_var } 参数 number | number_var 是在停止给定查询之前要处理的行数&#xff08;整数&#xff09;。 注…

【转】C#开发PACS医学影像处理系统(二):界面布局之菜单栏

转自&#xff1a;C#开发PACS医学影像处理系统(二)&#xff1a;界面布局之菜单栏 - 乔克灬叔叔 - 博客园 在菜单栏布局上&#xff0c;为了使用自定义窗体样式和按钮&#xff0c;我们需要先将窗体设置为无边框&#xff0c;然后添加一个Grid作为菜单栏并置顶&#xff0c;Vertical…

WF4.0 基础篇 (二十九) WorkflowInspectionServices

本文例子下载: http://files.cnblogs.com/foundation/WorkflowInspectionServicesSample.rar WorkflowInspectionServices 类 WorkflowInspectionServices可以得到流程中的Activity&#xff0c; 由于WF4.0的ActivityTree相对复杂,并不是象WF3.X的结构那样清晰, 在WF4.0中Activi…

Linux 命令平时积累

我是Windows Live Writer 写博客&#xff0c;来记录我平时遇到的一些问题和解决的方法。 记得刚刚接触Linux的时候&#xff0c;自己真是一名不折不扣的菜鸟&#xff0c;通过一年的努力&#xff0c;自己可以单独操作Linux了&#xff0c;我将把以后遇到的比较有用的命令积累在这篇…

【转】C#开发PACS医学影像处理系统(三):界面布局之工具栏

转自&#xff1a;https://www.cnblogs.com/Uncle-Joker/p/13650330.html 工具栏布局采用WPF中Grid作为容器&#xff0c;按钮采用自定义样式和图标&#xff0c;并采用Separator分割线&#xff1a; XAML设计器代码&#xff1a; 其中 Style"{StaticResource ButtonStyle}&…

WinCE6.0 修改开机Logo方法

中秋假期已过&#xff0c;回来继续该博文主题。今天讲解第二种方法&#xff0c;将 Logo 图片的数据写入到 Nand Flash 中&#xff0c;在启动初始化 LCD 的时候&#xff0c;从固定的地址将数据读出并填充到显示缓存中。实验平台&#xff1a;WinCE6.0Android6410 4.3寸CLD。以下内…

sql 替换text字段中的指定字符

--text不能直接替换 --mbody未目标字段update b_mail set mbodyreplace(convert(varchar(max),mbody),_viewstate,viewstate) where mno124转载于:https://www.cnblogs.com/stealther/archive/2010/04/02/1703191.html

【转】DICOM开发工具总结

转自&#xff1a;DICOM开发工具总结_qimo601的专栏-CSDN博客 网上流行的DICOM协议开发工具&#xff1a; 1、DICOM开发类库主要有&#xff1a; &#xff08;1&#xff09;DCMTK(3.6.0), 官方下载网站,&#xff08;如何安装编译DCMTK3.6.0&#xff09; DCMTK实现了对DICOM图像…