gcc & makefile 入门

本文深入介绍了GCC编译器的使用,包括简介、编译过程、常用选项以及多文件编译。同时,讲解了Makefile的基础应用,如何编写简单的Makefile实现编译,并讨论了GCC链接外部库的方法,包括静态库的链接。通过对GCC和Makefile的理解,有助于提升C/C++项目的编译效率和管理。
摘要由CSDN通过智能技术生成

目录

一、gcc 简易入门

1. gcc 简介

2. gcc 编译过程

3. gcc 命令的常用选项

4. gcc 编译单个文件

5. gcc 编译多个文件

二、使用 Makefile

使用简单的 makefile 实现上述编译

三、链接外部库

1. gcc 连接外部库

2. g++连接外部库


一、gcc 简易入门

1. gcc 简介

  • 什么是 gcc,它能干什么?

GCC(GNU Compiler Collection) 即 GNU 编译器套件,属于一种编程语言编译器,其原名为 GCC(GNU C Compiler)即 GNU c 语言编译器,虽然缩写一样但是功能上区别很大。GCC 的初衷是为 GNU 操作系统专门编写的一款编译器,原本的 GNU 是专用于编译 C 代码,现如今已扩展为可以编译 C、C++、Java、Objective-C 等多种编程语言的编译器集合了。这篇文章主要介绍 gcc 或 g++ 的使用。

  • GCC、gcc、g++三者有何关系?

gcc(GUN C Compiler)是 GCC 中的 c 编译器,而 g++(GUN C++ Compiler)是 GCC 中的 c++ 编译器。

gcc 和 g++ 两者都可以编译 c 和 cpp 文件,但存在差异。gcc 在编译 cpp 时语法按照 c 来编译但默认不能链接到 c++ 的库(gcc 默认链接 c 库,g++ 默认链接 c++ 库)。g++ 编译 .c 和 .cpp 文件都统一按 cpp 的语法规则来编译。所以一般编译 c 用 gcc,编译 c++ 用 g++。

2. gcc 编译过程

$ gcc -o hello hello.c

上面指令可以通过 gcc 将 c 源文件 hello.c 直接生成可执行程序 hello。这条命令隐含执行了 【 预处理、汇编、编译、链接形成最终的二进制可执行程序】 的过程。

在使用GCC编译程序时,编译过程可以被细分为四个阶段,包括预处理、编译、汇编、链接

  • 预处理(pre-processing)-E

在预处理阶段,编译器主要做:①加载头文件 ②宏替换 ③条件编译 ④产生后缀名为 [ .i ] 的文本文件。

带 "#" 的语句一般都是在预处理阶段处理。我们可以通过 gcc 的 -E 选项进行查看,如下所示:

gcc -E hello.c -o hello.i

编译器将 hello.c 预处理结果输出 hello.i 文件。

  • 编译(Compiling)-S

在编译过程中,编译器主要做:①语法检查和词法语义分析。 ②在确认所有指令都符合语法规则之后,将其翻译成等价的中间代码或者是汇编代码。③产生后缀名为 [ .s ] 的汇编文本文件。

gcc -S hello.i -o hello.s

编译器将预处理结果文件 hello.i 翻译成汇编代码 hello.s

  • 汇编(Assembling)-c

汇编阶段中,编译器主要 ①将汇编语言代码翻译成机器指令 ②产生后缀名为[ .o ]的二进制目标文件。也就是是把编译阶段生成的 ".s" 文件转成二进制目标代码(obj)

gcc -c hello.s -o hello.o

编译器将 hello.s 文件转化为 hello.o 文件。

  • 链接(Linking)

在成功编译之后,就进入了链接阶段。链接就是将目标文件、启动代码、库文件链接成可执行文件的过程,这个文件可被加载或拷贝到存储器执行。

编译器主要做:①进行动态链接或静态链接 ②产生可二进制执行文件。

gcc hello.o -o hello

编译器将 hello.o 链接成最终可执行文件 hello。

3. gcc 命令的常用选项

选项 解释
-ansi 只支持 ANSI 标准的 C 语法。这一选项将禁止 GNU C 的某些特色, 例如 asm 或 typeof 关键词。
-c 只编译并生成目标文件。
-DMACRO</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值