基于VSCode聊聊编译器那些事儿

目录

一、引言

二、GNU、GCC及gcc/g++的关系

1.GNU操作系统

2.GCC编译器

3.gcc 和 g++ 的区别

(1)编译方式不同

(2)调用标准库限制

三、VSCode与Visual Studio的区别

四、VSCode常用的编译方式

1. MinGW的gcc或g++

2. VS的cl.exe

3.clang


一、引言

常用操作系统:windows、Linux...

常用编译器 : MSVC、GCC、MinGW、CLANG...

  • MSVC : 微软 Microsoft 的 VC 编译器 , Windows 开发时使用该编译器 ;
  • GCC : Linux 中常用的编译器 , 一般嵌入式 , Linux , Android 相关的都使用该编译器 ;
  • CLANG : MAC 中一般使用该编译器 ;
  • MinGW : 全称 Minimalist GNU on Windows , Windows 中使用的 GCC 编译器 ;

二、GNU、GCC及gcc/g++的关系

        GNU是操作系统,GCC是编译器,gcc/g++是编译器命令。

1.GNU操作系统

        革奴计划 ,是一个自由软件集体协作计划,1983年9月27日由理查德·斯托曼在麻省理工学院公开发起,它的目的是创建一套完全自由的操作系统,称为GNU。

        虽然GNU计划为 GNU 操作系统量身定做了名为 The Hurd 的系统内核,但由于其性能比不上同时期诞生的 Linux 内核,最终 GNU 计划放弃 The Hurd 而选用 Linux 作为 GNU 操作系统的内核。

        GNU 计划最终实现了“打造一套自由、开源的操作系统”的初衷,但该操作系统并非完全产自 GNU 计划,因此其被称为 GNU/Linux 操作系统(人们更习惯称为 Linux 操作系统,但一定要明白这点:Linux是内核,是系统必不可少的关键部分之一,而整个系统,则是GNU系统)

        由于 Linux 操作系统的自由、开源,在其基础上衍生出了很多不同的 Linux 操作系统,如 CentOS、Ubuntu、Debian 等。这些 Linux 发行版中,大多数都默认装有 GCC 编译器(版本通常都较低)。

2.GCC编译器

        GCC原名为GNU C语言编译器(GNU C Compiler),只能处理C语言。但其很快扩展,变得可处理C++,后来又扩展为能够支持更多编程语言,如Fortran、Pascal、Objective -C、Java、Ada、Go以及各类处理器架构上的汇编语言等,所以改名GNU编译器套件(GNU Compiler Collection)  

3.gcc 和 g++ 的区别

        先说结论:我个人推荐使用g++。

(1)编译方式不同

        实际上,只要是 GCC 支持编译的程序代码,都可以使用 gcc 命令完成编译。可以这样理解,gcc 是 GCC 编译器的通用编译指令,因为根据程序文件的后缀名,gcc 指令可以自行判断出当前程序所用编程语言的类别,比如:

  • xxx.c:默认以编译 C 语言程序的方式编译此文件;
  • xxx.cpp:默认以编译 C++ 程序的方式编译此文件。
  • xxx.m:默认以编译 Objective-C 程序的方式编译此文件;
  • xxx.go:默认以编译 Go 语言程序的方式编译此文件;

当然,gcc 指令也为用户提供了“手动指定代表编译方式”的接口,即使用 -x 选项。例如,gcc -xc xxx 表示以编译 C 语言代码的方式编译 xxx 文件;而 gcc -xc++ xxx 则表示以编译 C++ 代码的方式编译 xxx 文件。

        但如果使用 g++ 指令,则无论目标文件的后缀名是什么,该指令都一律按照编译 C++ 代码的方式编译该文件。也就是说,对于 .c 文件来说,gcc 指令以 C 语言代码对待,而 g++ 指令会以 C++ 代码对待。但对于 .cpp 文件来说,gcc 和 g++ 都会以 C++ 代码的方式编译。

(2)调用标准库限制

        很多 C++ 程序都会调用某些标准库中现有的函数或者类对象,而单纯的 gcc 命令是无法自动链接这些标准库文件的。

        如果想使用 gcc 指令来编译执行 C++ 程序(该程序调用了标准库中的函数),需要在使用 gcc 指令时,手动为其添加 -lstdc++ -shared-libgcc 选项,表示 gcc 在编译 C++ 程序时可以链接必要的 C++ 标准库。也就是说,我们可以这样编译 demo.cpp 文件:

[root@bogon ~]# gcc -xc++ demo.cpp -lstdc++ -shared-libgcc
[root@bogon ~]#

        由此,demo.cpp 就被成功的编译了。

三、VSCode与Visual Studio的区别

        Visual Studio是一个集成的开发环境,集成了代码编辑器,编译器,调试器和图像化用户界面,功能相对来说比较完整;Visual Studio只能在Windows和mac之上运行。

        VSCode是一款代码编辑器,所以编译项目的话需要另外配置编译器;VSCode跨平台支持Windows、Mac以及Linux。

四、VSCode常用的编译方式

1. MinGW的gcc或g++

        MinGW 提供了一套简单方便的Windows下的基于GCC 程序开发环境。MinGW 收集了一系列免费的Windows 使用的头文件和库文件;同一时候整合了GNU的工具集,特别是GNU 程序开发工具,如经典gcc, g++, make等。

        MinGW是全然免费的自由软件,它在Windows平台上模拟了Linux下GCC的开发环境,为C++的跨平台开发提供了良好基础支持,为了在Windows下工作的程序猿熟悉Linux下的C++工程组织提供了条件。

2. VS的cl.exe

        cl.exe 是控制Microsoft C 和C++ 编译器以及链接器的工具。cl.exe 只能在支持Microsoft Visual Studio 的操作系统中运行。

3.clang

        Clang是一个 C语言、C++、Objective-C 语言的轻量级编译器。编译速度更快、编译产出更小、出错提示更友好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烫青菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值