手动编译代码并运行

1.编译器下载安装

编译器mingw下载地址:sourceforge.net/projects/mingw

下载成功/直接安装并运行/Install/选择安装文件夹/  可选D盘/dev/sdk/mingw  /确定/continue

开始联网下载。

continue/弹出mingw工具的安装管理器/开发C++相关套件,选择mingw32-base(勾选mark for installation标记为安装)、mingw32-goo-g++(同,C++编译器)

选择installation/apply changes应用更改/apply/开始联网下载并安装

然后可关闭窗口,编译器安装完成。

安装目录下可找到编译器程序,其中核心程序g++(编译器即g++程序)

2.配置环境变量

开始菜单/搜索“高级系统配置”/系统属性/环境变量/系统变量(下面一个框)/找到PATH变量/编辑/

新建/把mingw安装目录中的bin文件夹路径复制进来/确定

环境变量配置完成

3.验证

cmd/g++ -v回车 出现版本gcc version,说明环境变量OK。至此相关编译器前置操作一切顺利。

4.手动编译代码

在自己的代码文件夹里新建text文本文件;

写入hello world文件

#include "iostream"
using namespace std;

int main()
{
    cout << "Hello World!!!" << endl;
    return 0;
}

保存;关闭。

改文件名&后缀名.cpp。现在相当于有一份代码文件,要做的是如何通过编译器把这份代码编程可执行的程序。

打开CMD,让当前命令提示符的路径切换到代码所在文件夹。现在所在文件夹在C盘

输入d:   ,切换到D盘;

cd 路径;//如:cd D:\dev\code\cpp\mine_cpp

现在, 输入:dir  命令,可看到当前文件夹有hello world.cpp的文件

现在,可通过刚才安装的编译器编译这份代码文件。

怎么用?

(记住格式即可)

输入: g++ hello world.cpp -o hello_world.exe//使用g++程序,选择hello world.cpp的文件(选择被编译的代码文件),-o(表示输出),写上要生成的程序名称hello_world.exe。回车。

这句g++ hello world.cpp -o hello_world.exe 表示把代码文件hello world.cpp变成hello_world.exe的程序。

回车完后,可看到目录里生成hello_world.exe,直接双击运行没啥效果,可在cmd里运行。

在cmd中输入hello_world.exe,直接回车,可出现Hello World!!!,当前代码执行成功。

图文笔记:www.yuque.com/bigdata-caoyu/newcpp

补充:

MinGW,是Minimalist GNU for Windows的缩写。它是一个可自由使用和自由发布的Windows特定头文件和使用GNU工具集导入库的集合,允许你在GNU/Linux和Windows平台生成本地的Windows程序而不需要第三方C运行时C Runtime)库。

c++编译器有:1.acc 2.bcc 3.ccc 4.clang 5.gcc

1.acc

HP aC++ compiler, 指的是HP C/aC++ 开发者工具包中包含的编译器,特指HP C/ANSI C compiler编译器。它主要是在惠普服务器上运行的。 HP Integrity 和 HP 9000 服务器上运行的 HP-UX 操作系统上的编译器。HP-UX 是基于System V,是Unix的一个变种。惠普服务器支持范围从入门级商业应用到大规模服务器应用, 比如SAP软件就有搭建在 HP-UX 操作系统之上的。

2.bcc

Borland C++ compiler,是MS-DOS 和 Microsoft Windows的编译器。Turbo C/C++的进化版。

3.ccc

Compaq C compiler, 如其名,康柏电脑公司的C编译器,比如操作系统Tru64 UNIX就是使用这种编译器。

4.clang

Clang C compiler,Clang的C语言编译器。Clang是一个支持C,C++,OC,OC++四种C家族编程语言的编译器。它的目标就是为苹果提供提供基于LLVM的GNU编译套装(GCC)的替代品。我们现在的mac电脑就是使用这个编译器。

最早之前苹果的编译器完全继承UNIX,使用的是GNU编译套件,后来,编译后端(将生成的AST数优化,并且生成适用于各个系统架构的指令集合)。苹果使用LLVM将编译优化和编译后端全部统一了。但是前端还是GCC,所以有一段时间是GCC+LLVM的组合。但是后来Clang创建之后,就是使用Clang+LLVM的组合了。现在Apple的所有语言都是基于这个组合了。

5.gcc

GNU C compiler。GNU就是最著名的Unix的编译器了。最早的时候叫做GNU C编译器,早于1984年,每一个类Unix操作系统都需要一个C编译器来让程序员可以用高级语言C来写程序。当时没有免费的编译器,所以GNU项目从头开发了一个编译器。1987年GCC的第一个版本发布。1992年,增加了对C++语言的支持。而后,支持了更多的语言,所以GCC这个缩写由原先的GNU C Compiler变化成为了GNU Compiler Collection。

GCC(GNU Compiler Collection,GNU编译器套件)是由GNU开发的编程语言编译器。GNU编译器套件包括C、C++、 Objective-C、 FortranJavaAdaGo语言前端,也包括了这些语言的库(如libstdc++,libgcj等。)

GNU是一个操作系统

GCC(GNU Compiler Collection)和 G++ 是 GNU 项目的一部分。GCC 是一个多语言支持的编译器,可以处理 C、C++、Fortran 等语言,而 G++ 是 GCC 的 C++ 前端,用于专门处理 C++ 源代码。

实际上,只要是 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++ 代码的方式编译。

有读者可能会认为,C++ 兼容 C 语言,因此对于 C 语言程序来说,使用 gcc 编译还是使用 g++ 编译,应该没有什么区别,事实并非如此。严格来说,C++ 标准和 C 语言标准的语法要求是有区别的。C++ 标准对代码书写规范的要求更加严格。

除此之外对于编译执行 C++ 程序,使用 gcc 和 g++ 也是有区别的。要知道,很多 C++ 程序都会调用某些标准库中现有的函数或者类对象,而单纯的 gcc 命令是无法自动链接这些标准库文件的。

如果想使用 gcc 指令来编译执行 C++ 程序,需要在使用 gcc 指令时,手动为其添加 -lstdc++ -shared-libgcc 选项,表示 gcc 在编译 C++ 程序时可以链接必要的 C++ 标准库

总之:对于 C 语言程序的编译,我们应该使用 gcc 指令,而编译 C++ 程序则推荐使用 g++ 指令

图中为安装mingw后Clion里的显示

GCC/G++ 的编译过程分为四个主要阶段:

1. 预处理阶段

预处理是编译的第一个阶段,主要完成以下任务:

  • 宏替换:替换所有 #define 定义的宏。
  • 条件编译:根据预处理指令(如 #ifdef)选择性地编译代码。
  • 去除注释:删除源代码中的注释内容。
  • 展开头文件:将 #include 指定的文件插入到源代码中。

命令示例:

gcc -E hello.c -o hello.i
  • **选项 **-E:执行预处理并停止。
  • **输出文件 **.i:预处理后的代码。
2. 编译阶段

在此阶段,编译器会:

  • 检查源代码的语法和语义是否正确。
  • 将 C/C++ 源代码翻译为汇编语言代码。

命令示例:

gcc -S hello.i -o hello.s
  • **选项 **-S:仅执行编译,生成汇编代码。
  • **输出文件 **.s:包含汇编代码。
3. 汇编阶段

汇编阶段将汇编代码转换为机器可识别的目标代码(二进制格式)。

命令示例:

gcc -c hello.s -o hello.o
  • **选项 **-c:仅执行汇编,生成目标文件。
  • **输出文件 **.o:二进制目标文件。
4. 连接阶段

连接阶段将多个目标文件和库文件链接在一起,生成可执行文件或库文件。连接过程中可能会调用外部的动态或静态库。

命令示例:

gcc hello.o -o hello
  • **输出文件 **hello:最终生成的可执行文件。

引申知识-动态链接与静态链接:edge/C++书签/博客园/深入理解GCC 和 G++ 编译器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值