gcc编译命令_你用“命令行”编译过“代码”吗

一. 前言


1. 人生的第一个Hello Word

    曾经年少的我们,当拿到第一本编程教材时,打开了全国高校共同推行的集成开发环境——Visual C++ 6.0,并以用一种陌生的英文符号豪放书写下

#include void main(){    printf("Hello World\n");}

,而此时陌生的手感忐忑不安犹豫后,才敢同时按下了Ctrl和F5双键,但一晃一个黑色窗口弹出后却能无比触动着我们的心灵!

28526664047ebbd332d1a8514484add3.png 

而对于“萌动”的我们,却不知道背后有无数个攻城狮背着我们无数个日日夜夜攻克了无数个难题,才攻下了一个IDE城墙,这使得我们才能快速踏上了“用代码改变世界”的征途。

2. 集成开发环境(IDE)组成

    对于C语言而言,从代码编写,到最后编译代码生成可执行文件,一般会经过以下几个步骤:

b7f94c62d783becef9048cc16ae2415a.png 

其中步骤1由 编辑器来完成,步骤2~5由 编译器来完成,而一个基本的集成开发环境(IDE)就由 编辑器编译器两部分组成。

    集成开发环境(IDE)一般为了使开发更加方便快捷,缩短开发时间而制作。目前常见的各种编程语言开发、单片机开发和少量的SOC芯片开发一般都提供有对应优质的IDE工具,能极大提升了开发者的开发速度。而由于世上芯片的种类达到了万级,且各种编程语言在不同的芯片平台运行所需要的编译器也各不相同,这使得IDE开发者很难对每款芯片都制作出相应适合的集成开发环境,但为了能对各种芯片进行开发和能让各种编译语言能运行在不同芯片平台上,芯片厂商一般都会为开发人员提供一个专门适合本产芯片开发的 编译器。开发者拿到这个 编译器后,如果该芯片没有对应的集成开发环境可用,一般会使用 Linux内核类操作系统命令行对源码进行编译。

二. 准备工作


通过命令行编译代码只需要到三个工具:Linux内核类的操作系统代码编辑器编译器

(1)Linux内核类的操作系统
(2)代码编辑器
(3)编译器
  • Linux内核类的操作系统

    我们一般使用的电脑桌面操作系统大多都是Windows操作系统。为了能使用到Linux内核类的操作系统,可以将个人电脑安装成 双系统模式或者在Windows系统上 安装虚拟机软件(Vmware、VirtualBox)来安装Linux内核类的操作系统。

    这次的实验将使用Vmware软件并安装Deepin V20国产桌面发行版操作系统对使用 命令行编译代码进行测试,其中该Linux内核类的操作系统界面如下图所示:

1f4bb7c175748c7c0e61daae2f220e0b.png 
  • 代码编辑器

    代码编辑器的作用很简单,只要能输入代码并能保存的编辑器都能作为代码编辑器,比如Windows系统自带的 记事本,如果新建一个.c后缀的文件,通过记事本输入C语言代码后并保存,就能完成代码输入工作。但有些“专用”的代码编辑器,它们有代码提示、代码自动补全和代码关键词高亮等功能,可以加快开发者编写代码的速度,开发者可根据自己的爱好选择符合自己的代码编辑器。其中代码编辑器软件常见的有:notepad++、vs code、sublime text、vim、emacs和eclipse等等。

  • 编译器

    编译器本质是一个程序,这个程序能将 源代码最终转换成机器能识别的代码(二进制文件、可执行文件)。编译器的种类繁多,其不同的平台,不同的操作系统,其使用的编译器各不相同。例如Windows系统上C语言常使用的编译器一般为微软的VC++或MSVC2010/2015/2017等等,而对于各种单片机也有对应编译器,但有一种编译器,其提供了多个操作系统、多款单片机和多款SOC芯片对应的编译器版本,这种编译器名称为:GCC编译器

    GCC编译器是一种跨平台、可编译C语言的自由软件,其中在Linux内核类的操作系统上所使用的C语言编译器大多都是GCC编译器。此次的 命令行编译代码测试实验也将使用GCC编译器来完成编译工作,其中在Deepin V20操作系统上安装GCC编译器流程如下所示:

(1) 打开Deepin操作系统 终端(命令行),其中打开方法如下:

方法一:在桌面上,右键—>在终端中打开方法二:按下Ctrl+Alt+T三个键
3ea84d9105d10ea1a85f063378b6c7bf.png 

(2) 在终端上输入 sudo apt install gcc,回车,输入root密码,即可安装该平台该操作系统的GCC编译器版本。其中对于安装命令的解析如下所示:

1. sudo:表示以root(管理员)的方式执行后面的命令,也就是apt install gcc,如果不以root方式执行安装软   件,由于默认状态是"用户状态",其没有安装软件的权限,造成安装软件失败。如果Deepin系统新安装,默认没有root密码(无法使用sudo),需要在终端上执行sudo passwd,并连续输入两次新密码(Linux终端输入密码会无字符提示,但实际已经输入)2. apt:是系统自带的一个软件包管理软件,通过它可以安装软件或者卸载软件。3. install:是apt安装软件的命令4. gcc:所要安装的软件名
d0d404b2a098c427ae1d484ec89b5e0e.png 

三. 用命令行实现代码编译


1. 代码输入方法一

    在Deepin操作系统下,可以在桌面:右键-新建文档-文本文档,新建出一个txt的文本,然后重命名成.c后缀的文本,例如main.c。其中重命名后缀需要根据以下步骤对文件管理器设置才能进行。

92a7d74e411cdf3446d9c5b788842d7c.png 

之后双击新建的.c文件,会自动打开Deepin系统的默认编辑器,输入相关代码后并保存,即可完成代码编辑操作。

a0fc36c2c926507b9d62ee1198ed8ae7.png 
2. 代码输入方法二

    由于有些Linux内核类的操作系统并无图形界面,尤其是服务器类的Linux操作系统,所以编辑代码工作不能使用图像界面的编辑器(记事本、notepad++、vs code、sublime text)来完成。而考虑到该问题,一般Linux内核类的操作系统会自带有 vim编辑器软件,该编辑器可在终端(命令行)内完成代码编辑操作。其中vim编辑代码步骤如下所示:

(1)  在终端(命令行内)上输入 vim main.c,回车,如果main.c文件不存在会自动创建。

user@user-PC:~/Desktop$ vim main.c

(2)  进入vim后,单击键盘的 i键,进入输入模式,左下方会提示 -- 插入 --字样。

(3)  输入代码完毕后,单击键盘的 Esc键,退出输入模式,并按顺序输入 :wq三个字母,回车,即可保存和退出vim返回到终端命令行模式。其中w为write,是写入(保存)命令,q是quit,退出命令。

2d68cbe83f4eb50b68927bf132391100.png 
3. 命令行编译代码

最简单,一步到位,命令行编译代码格式:

gcc    源码文件名   -o   输出文件名

例如:gcc main.c -o main  ;即可一步到位把main.c源码编译成执行文件main文件,其中 -o为gcc的编译选项,为output的意思,其它选项可输入 gcc -h进行查询,编译完成后可使用 ls命令查看输出文件。其中操作流程如下动图所示:

8832afac248a5739823c03b8424fd99e.gif 

如果想把源码文件按照标准编译:预处理 - 编译 - 汇编 -链接,这些流程来编译,可在命令行输入以下相关编译命令:

gcc预处理命令: -E,输出文件名后缀为 .i

gcc  -E  main.c  -o  main.i

gcc编译命令:-S,将预处理.i文件编译输出汇编.s文件

gcc  -S  main.i  -o  main.s

gcc汇编命令:-c,将汇编.s文件编译输出机械码.o文件

gcc  -c  main.s  -o  main.o

gcc链接命令:将机械码.o文件编译输出可执行文件

gcc  main.o  -o  main

其中编译流程如下动图所示:

46744850851c57b7f76b96f6fcaa6a8c.gif 
4. 执行

终端下执行命令:./main即可

2fc8e461b31bd6496a0a8d66f3674f6c.gif 
5. 结论

    通过上诉流程,完成了使用命令编译代码的教程。步骤总结如下:

1. 安装gcc编译器2. 编写代码3. 通过 gcc main.c -o main 命令编译代码,生成可执行文件4. 执行可执行文件: ./main

    但上诉教程,对单个源代码编译还比较合适,如果是多个源代码,需要输入很长的命令,如果反复编译,就要重复输入多次长命令,这将影响到工作效率。为了解决这个问题,Linux环境下提供了 make管理工具。

四. 使用make管理工具管理代码、编译代码


1. make管理工具简介

    make管理工具包括两部分:一个文件名为 Makefile的文件、一个命令为 make的命令。

    一般 文件名为Makefile的文件放在与 源码同目录下,Makefile文件有特定的编写语法,和shell脚本语言类似。其中Makefile文件一个最简单的模板如下所示:

main : main.c        gcc main.c -o main

    简单的Makefile文件有三部分组成:目标依赖关系执行命令。上面代码的第一行以 :分成左右两部分,左边是 目标,右边是 依赖关系,第二行是 执行命令,但必须以 Tab键开头,再输入命令才有效。其中这三部分的解释如下:

目标:命名可以随意,但必须要写,不可省略,目标并不代表生成的文件名,如果在高级Makefile文件编写中,会存在多个目标。目标的作用是作为标志位,以供下个目标调用。

依赖关系:如果执行命令中不使用Makefile的自动识别源文件命令,可以省略,依赖关系可以是源文件,或者目标。

执行命令:执行编译的命令

    上文只讲述了最简单的make管理工具使用操作,如果在实际使用中,还需阅读更多make相关的知识才能完成更复杂的代码管理和编译。

2. 命令行使用make编译代码

    如果在源码的所在目录新建Makefile文件,并按照make语法书写正确编译内容后,在终端(命令行)上只需执行 make命令,即可编译出可执行文件。其中make编译动态图片如下图所示:

91d1688a25bc3c4f769da772e9aa29f7.gif 

五. 结论与应用前景


1. 结论

通过上诉教程,完成了以下内容介绍与教学:

  • 介绍了集成开发环境编译代码的方式

  • 介绍了为什么要学习使用命令行编译代码

  • 介绍了命令行编译代码前的准备工作

  • 介绍了Deepin系统下编辑代码的两种方式,编辑器和vim

  • 介绍了使用gcc命令行编译代码的方法

  • 介绍了使用make管理代码、编译代码的方法

2. 应用前景
  • 如果某款集成芯片,只提供该芯片的编译器,没有集成开发环境可用,需要用到命令行编译代码

  • 如果从事Linux内核和驱动开发工作,需要学会使用命令行编译代码

  • 如果从事嵌入式软件开发工作,需要学会使用命令行编译代码,交叉编译出某款芯片的应用

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值