gcc/g++ 、Make/Makefile、CMake/CMakeLists.txt、qmake关系简述

news/2025/1/11 0:30:08/

1、gcc与g++

首先来了解下编译器的主要工作流程:

源码(Source Code)>> 预处理器(Preprocessor)>> 编译器(Compiler) >> 汇编程序(Assembler)>> 目标代码(Target Code) >> 链接器(Linker)>> 可执行程序(Executables)

gcc:

GCC,全称GNU Compiler Collection,是GNU编译器套装,最开始编译C语言,后来可以处理C++以及Fortran、Java、Go等其他语言。

g++:

而g++是GCC对C++的升级版本

gcc与g++的区别:

两者都可以编译C和C++代码;对于.c文件,GCC把它当做C程序,G++当做C++程序;对于.cpp文件,二者都将其视为C++程序。

编译阶段,G++会调用GCC,对于C++代码,两者等价;但GCC不能自动和C++程序使用的库链接。所以,对于C++程序,一般都使用G++做编译和链接。

小结:

  1. g++是gcc对C++的升级版本,编译阶段,会调用gcc。
  2. 如果你有一份C写的源代码(.c文件),你可以用gcc来做编译和链接,也可以用g++;但是源代码是C++写的话,只能用g++了,应为gcc不能自动和C++程序使用的库链接

2、Make与Makefile、CMake与CMakeLists.txt、qmake

GCC/G++一般用于单个源文件的编译,当一个工程有多个源文件时,再用GCC/G++逐个编译的话,效率太低了,所以就出现了Make工具

Make相当于一个批处理命令,本省没有编译功能,通过makefile规则文件调用GCC/G++或其他命令来编译和链接。当工程较大时,手写makefile比较麻烦;且在不同平台下编译时,需要重新修改makefile,十分麻烦,因此CMake应运而生啦。

CMake是一个跨平台的编译工具,通过规则文件CMakeLists.txt生成Makfile文件,CMakeLists.txt文件需要自己去写。

qmake是为Qt量身打造的编译工具,Qt是跨平台C++图形用户界面应用程序开发框架。qmake根据Qt工程文件(.pro)生成跨平台的makefile文件。

小结:

当我们在qt写好CMakeLists.txt并运行,点击构建可能用到qmake根据CMakeLists.txt文件生成makfile。点击CMake,用到CMake根据CMakeLists.txt文件生成makfile。然后再是Make(批处理命令)根据刚刚得到的makefile文件调用G++/GCC编译器进行对源代码进行编译和链接。

参考:

https://www.cnblogs.com/dinghongkai/p/11316528.html#


http://www.ppmy.cn/news/80660.html

相关文章

芯片设计全流程知识点总结

1、低功耗工具 功耗分析预测分析工具包括PowerArtist(Ansys)、Spyglass Power(Synopsys)、Prime Time PX(Synopsys)和Redhawk(Ansys)等。通过对实际项目中;不同工具的比…

【星海随笔】计组数学小课堂

计算机组成原理 https://www.bilibili.com/video/BV1ps4y1d73V?p8 16的负一次方既为1/16 16^-1 16进制转换为10进制。 例如:5.8 5 * 16^1 8 * 16^-1 十进制转N进制,则除以N ,然后逆序余数 2->8 进制快速转换 001 111 000 010 011 010 …

Tiny+ 语言词法之C语言

访问【WRITE-BUG数字空间】_[内附完整源码和文档] 语义分析本质上就是在语法分析的基础上进一步完善分析的功能。举个例子来说,在语法分析部分的 if_stmt 函数中,在语义上判断条件必须返回布尔类型的值,因此我们加入一个判断,判断…

Linux 学习目录合集【文章索引】

前言:本内容为笔者自学笔记内容。 本文中的操作环境:腾讯云服务器:CentOS 7.6 64bit 学习阶段规划: Linux 基本操作【基本命令、vim、makefile使用等】Linux 系统【进程:概念、控制、通信;IO基础&#xff1…

Java中自定义注解

当使用Java编写应用程序时,我们常常使用注解来为程序添加附加信息,并且可以在运行时读取这些注解。除了Java提供的预定义注解外,我们还可以自定义注解来满足自己的需求。在本文中,我们将介绍Java中自定义注解的基础知识。 一、什…

JVM-0522

JVM性能调优 一、概念 1.生产环境中的问题 生产环境发生了内存溢出该如何处理?生产环境应该给服务器分配多少内存合适?如何对垃圾回收器的性能进行调优?生产环境CPU负载飙高该如何处理?生产环境应该给应用分配多少线程合适&…

【Hbase 05】Hbase表的设计原则与优化方案

这里说一下Hbase在使用过程中的表设计原则与优化方案,如果你是运维或者开发兼顾环境的工作,也许比较受用,话不多说,我们直接开始说优化的内容: 一、表设计原则 1.行键设计 行键在设计的时候要尽量的散列,例如可以考虑使用哈希、加密算法等使结果散列,这样能保证请求不会…

操作系统第三章——存储系统(下)

锦衣雪华玉颜色,回眸一笑天下倾 文章目录 3.2.1 虚拟内存的基本概念知识总览传统存储方式的特征,缺点局部性原理虚拟内存的定义如何实现虚拟内存技术知识总结 3.2.2 请求分页管理方式知识总览页表机制缺页中断机制地址变换机制知识回顾 3.2.3 页面置换算…