嵌入式Linux驱动学习笔记01_Ubuntu系统入门

发布于:2022-10-12 ⋅ 阅读:(492) ⋅ 点赞:(0)

目录

前言

一、Ubuntu系统安装

1.1 VMware15安装虚拟机不兼容,无法打开

1.2 Ubuntu联网问题

二、Ubuntu系统入门

2.1 Ubuntu系统初体验

 2.2 Ubuntu终端操作

2.3 shell操作

2.3.1 shell简介

2.3.3 常用shell命令

2.4  APT下载工具

2.5Ubuntu 下文本编辑

2.5.1 安装 VIM 编辑器:

2.5.2 vim编辑器的使用

2.6 Linux 文件系统

2.6.1 Linux 文件系统简介以及类型

2.6.2 Linux 文件系统结构

2.6.3 文件操作命令

2、文件夹创建命令—mkdir

2.6.4 命令行进行文件的压缩和解压缩

2.6.5 文件查询和搜索(没怎么用过)

2.6.6文件类型

2.7 Linux 用户权限管理

2.7.1Ubuntu 用户系统

2.7.2权限管理

2.7.3 权限管理命令

2.8 Linux磁盘管理

2.8.1 Linux磁盘管理基本概念

2.8.2 磁盘管理命令

三、Linux C 编程入门

3.1 Hello World!

3.1.1编写代码

3.1.2 编译代码

3.2 GCC编译器

3.2.1 gcc 命令

3.2.2 编译错误警告

3.2.3 编译流程

3.3 Makefile 基础

3.3.1 何为Makefile

3.3.2 Makefile 的引入

3.4 Makefile 语法

3.4.1 Makefile 规则格式

3.4.2 Makefile 变量

3.4.3 Makefile 模式规则

3.4.4 Makefile 自动化变量

3.4.5 Makefile 伪目标

3.4.6 Makefile 条件判断

3.4.7 Makefile 函数使用


前言

        前一段时间学习Linux驱动,实在是迷糊了。

        决定整理笔记,争取消除困惑。

        打算从基础(Ubuntu入门)开始,把笔记整理一番。

        全文大量参考正点原子的教程,在此对正点原子团队表示感谢。

一、Ubuntu系统安装

        简单来说,分两步:1.安装VMware。2.安装Ubuntu。

        过程很简单,我是参考正点原子教程安装的,当然也遇到了一些问题,总结如下:

1.1 VMware15安装虚拟机不兼容,无法打开

         先把VMware15卸载,然后安装VMware16。

VMware15卸载参考:https://blog.csdn.net/qq_45011675/article/details/105476677

VMware16安装教程:https://blog.csdn.net/m0_50519965/article/details/116175873

1.2 Ubuntu联网问题

        安装好的Ubuntu无法联网,下面是找的一种联网方式,可参考。

链接:让Ubuntu联网

二、Ubuntu系统入门

2.1 Ubuntu系统初体验

        熟悉一下这个系统的图形界面,直接上图。

 

 2.2 Ubuntu终端操作

        鼠标右击,选择打开终端。

         命令“ls”是打印出当前所在目录中所有文件和文件夹。

2.3 shell操作

2.3.1 shell简介

        严格意义上来讲,Shell 是一个应用程序,它负责接收用户输入命令,然后根据命令做出相应的动作,Shell 负责将应用层或者用户输入的命令传递给系统内核,由操作系统内核来完成相应的工作,然后将结果反馈给应用层或者用户。

2.3.2 Shell 基本操作

Shell 命令的格式如下:
command -options [argument]
command:   Shell 命令名称。
options :    选项,同一种命令可能有不同的选项,不同的选项其实现的功能不同。
argument :Shell 命令是可以带参数的,也可以不带参数运行。
例子:
ls
ls -l
ls /usr

 运行结果如下:

 注:Shell 命令支持自动补全功能使用自动补全功能以后我们只需要输入命令的前面一部分字母,然后按下 TAB 键,如果只有一个命令匹配的话就会自动补全这个命令剩下的字母。如果有多个命令匹配的话系统就会发出报警声音,此时在按下一次 TAB 键就会列出所有匹配的命令。

2.3.3 常用shell命令

1、目录信息查看命令 ls
        文件浏览命令 ls,格式如下:

 ls [选项] [路径]

        ls 命令主要用于显示指定目录下的内容,列出指定目录下包含的所有的文件以及子目录,它的主要参数有:  
-a   显示所有的文件以及子目录,包括以“.”开头的隐藏文件。
-l   显示文件的详细信息,比如文件的形态、权限、所有者、大小等信息。
-t   将文件按照创建时间排序列出。
-A   和-a 一样,但是不列出“.”(当前目录)和“..”(父目录)。
-R  递归列出所有文件,包括子目录中的文件。
        Shell 命令里面的参数是可以 组合 在一起用的。
2、目录切换命令 cd
3、当前路径显示命令 pwd
4、系统信息查看命令 uname
5、清屏命令 clear
6、切换用户执行身份命令 sudo
7、添加用户命令 adduser
8、删除用户命令 deluser
9、切换用户命令 su
10、显示文件内容命令 cat
11、显示和配置网络属性命令 ifconfig
12、系统帮助命令 man
13、 系统重启命令 reboot
14、系统关闭命令 poweroff
15、软件安装命令 install

2.4  APT下载工具

       APT 工具常用的命令如下:

1、更新本地数据库

sudo apt-get update

        这个命令会访问源地址,并且获取软件列表并保存在本电脑上。

2、检查依赖关系

        有时候本地某些软件可能存在依赖关系,所谓依赖关系就是 A 软件依赖于 B 软件。通过如下命令可以查看依赖关系,如果存在依赖关系的话 APT 会提出解决方案:
sudo apt-get check

3、软件安装

sudo apt-get install package-name

        上述命令是由“apt-get”和“install” 组合 在一起的,“ package-name ”就是要安装的软件名字,“apt-get”负责下载软件,“install”负责安装软件。比如我们要安装Ubuntu 下的串口工具“minicom”软件,我们就可以使用如下命令:

 sudo apt-get install minicom

        安装的过程中,会有如下所示询问:
您希望继续执行吗? [Y/n]
        如果希望继续执行的话就输入 y,如果不希望继续执行的话就输入 n。
4、软件更新

        sudo apt-get upgrade package-name

5、卸载软件
sudo apt-get remove package-name

2.5Ubuntu 下文本编辑

        我个人比较喜欢的文本编辑方式是:

        在Windows上编辑后,拷贝到Ubuntu。

        Windows:notepad++         Ubuntu:vim

2.5.1 安装 VIM 编辑器:

sudo apt-get install vim

2.5.2 vim编辑器的使用

        指令式的编辑器,不需要鼠标,也没有菜单,仅仅使用键盘来完成所有的编辑工作。

        三种工作模式:输入模式、指令模式和底行模式,通过切换不同的模式可以完成不同的功能。

        VIM 默认是以只读模式打开的文档,因此我们要切换到输入模式,切换到输入模式的命令如下:

        i  在当前光标所在字符的前面,转为输入模式。
        I  在当前光标所在行的行首转换为输入模式。
         a 在当前光标所在字符的后面,转为输入模式。
        A 在光标所在行的行尾,转换为输入模式。
        o 在当前光标所在行的下方,新建一行,并转为输入模式。
        O 在当前光标所在行的上方,新建一行,并转为输入模式。
        s  删除光标所在字符。
        r   替换光标处字符。

        按下键盘上的“a”键,这时候终端左下角会提 示“插入”字样,表示我们进入到了输入模式。

        从 输入模式切换到指令模式:按下键盘的 ESC 键。

        指令模式顾名思义就是输入指令的模式,这些指令是控制文本的指令:

1、移动光标指令:

        h(或左方向键) 光标左移一个字符。
        l(或右方向键)  光标右移一个字符。
        j(或下方向键)  光标下移一行。
        k(或上方向键) 光标上移一行。
        nG                   光标移动到第 n 行首。
        n+                    光标下移 n 行。        
        n-                     光标上移 n 行。
2、屏幕翻滚指令
        Ctrl+f         屏幕向下翻一页,相当于下一页。
        Ctrl+b         屏幕向上翻一页,相当于上一页。
3、复制、删除和粘贴指令
        cc        删除整行,并且修改整行内容。
        dd        删除改行,不提供修改功能。
        ndd      删除当前行向下 n 行。
        x           删除光标所在的字符。
        X           删除光标前面的一个字符。
        nyy       复制当前行及其下面 n 行。
        p            粘贴最近复制的内容。
        进入 底行模式 的方式是先进入指令模式下,然后在指令模式下输入“:”进入底行模式。
我们可以在 “:”后面输入命令,常用的命令如下:
        x         保存当前文档并且退出。
        q         退出。
        w         保存文档。
        q!         退出 VI/VIM,不保存文档。
        
还可以在指令模式下输入“/”进入底行模式,在“/”底行模式下我们可以在文本中搜索指定的内容。

2.6 Linux 文件系统

        操作系统的基本功能之一就是文件管理,而文件的管理是由文件系统来完成的。Linux 支持多种文件系统,本节我们就来讲解 Linux 下的文件系统、文件系统类型、文件系统结构和文件系统相关 Shell 命令。

2.6.1 Linux 文件系统简介以及类型

       Linux 下常用的磁盘分割工具为: fdisk 工具。

        后面会用到:移植 Linux 的时候需要将 SD 卡分为两个分区来存储不同的东西。

        格式化:使用 fdisk 创建好分区以后也是要先在创建好的分区上面创建文件系统。

        在 Linux 下创建一个分区并且格式化好以后我们要将其 “挂载”到一个目录下才能访问这个分区。Linux 下我们使用 mount 命令来挂载磁盘。挂载磁盘的时候是需要确定挂载点 的,也就是你的这个磁盘要挂载到哪个目录下。  

         ext4 文件系统

        在终端中输入如下命令来查询当前磁盘挂 载的是啥文件系统:

df -T -h

2.6.2 Linux 文件系统结构

       根目录“/”

        创建一个用户,系统会在/home 这个目录下创建一个以这个用户名命名的文件 夹,这个文件夹就是这个用户的根目录“~”)。

cd /         //进入到根目录“ / ”
ls            //查看根目录“ / ”下的文件以及文件夹
        根目录“/” 中的一些重要的文件夹:
/bin         存储一些二进制可执行命令文件,/usr/bin 也存放了一些基于用户的命令文件。
/sbin         存储了很多系统命令,/usr/sbin 也存储了许多系统命令。
/root         超级用户 root 的根目录文件。
/home         普通用户默认目录,在该目录下,每个用户都有一个以本用户名命名的文件夹。
/boot         存放 Ubuntu 系统内核和系统启动文件。
/mnt         通常包括系统引导后被挂载的文件系统的挂载点。
/dev         存放设备文件,我们后面学习 Linux 驱动主要是跟这个文件夹打交道的。
/etc         保存系统管理所需的配置文件和目录。
/lib         保存系统程序运行所需的库文件,/usr/lib 下存放了一些用于普通用户的库文件。
/lost+found 一般为空,当系统非正常关机以后,此文件夹会保存一些零散文件。
/var         存储一些不断变化的文件,比如日志文件
/usr         包括与系统用户直接有关的文件和目录,比如应用程序和所需的库文件。
/media         存放 Ubuntu 系统自动挂载的设备文件。
/proc         虚拟目录,不实际存储在磁盘上,通常用来保存系统信息和进程信息。
/tmp         存储系统和用户的临时文件,该文件夹对所有的用户都提供读写权限。
/opt         可选文件和程序的存放目录。
/sys         系统设备和文件层次结构,并向用户程序提供详细的内核数据信息。

2.6.3 文件操作命令

1、创建新文件命令—touch

touch [参数 ] [文件名 ]

2、文件夹创建命令—mkdir

mkdir [ 参数 ] [ 文件夹名目录名 ]
        主要参数如下:
        -p 如所要创建的目录其上层目录目前还未创建,那么会一起创建上层目录。
3、文件及目录删除命令—rm
rm [ 参数 ] [目的文件或文件夹目录名 ]
        命令主要参数如下:
        -d         直接把要删除的目录的硬连接数据删成 0,删除该目录。
        -f         强制删除文件和文件夹(目录)。
        -i         删除文件或者文件夹(目录)之前先询问用户。
        -r         递归删除,指定文件夹(目录)下的所有文件和子文件夹全部删除掉。
        -v         显示删除过程。
4、文件夹(目录)删除命令—rmdir
rmdir [ 参数 ] [ 文件夹 ( 目录 )]
        命令主要参数如下:
        -p 删除指定的文件夹(目录)以后,若上层文件夹(目录)为空文件夹(目录)的话就将其一起删除。
5、文件复制命令—cp
        
cp [ 参数 ] [源地址 ] [目的地址 ]
        主要参数描述如下:
        -a         此参数和同时指定“-dpR”参数相同
        -d         在复制有符号连接的文件时,保留原始的连接。
        -f         强行复制文件,不管要复制的文件是否已经存在于目标目录。
        -I         覆盖现有文件之前询问用户。
        -p         保留源文件或者目录的属性。
        -r 或-R 递归处理,将指定目录下的文件及子目录一并处理
6、文件移动命令—mv
mv [ 参数 ] [源地址 ] [目的地址 ]
        主要参数描述如下:
        -b         如果要覆盖文件的话覆盖前先进行备份。
        -f         若目标文件或目录与现在的文件重复,直接覆盖目标文件或目录。
        -I         在覆盖之前询问用户。

2.6.4 命令行进行文件的压缩和解压缩

        命令行下进行压缩和解压缩常用的命令有三个:zip、unzip 和 tar。

1、命令 zip:用于将一个或者多个文件压缩成一个.zip 结尾的文件
zip [ 参数 ] [ 压缩文件名 .zip] [ 被压缩的文件 ]
        主要参数函数如下:
        -b<工作目录>         指定暂时存放文件的目录。
        -d         从 zip 文件中删除一个文件。
        -F         尝试修复已经损毁的压缩文件。
        -g         将文件压缩入现有的压缩文件中,不需要新建压缩文件。
        -h         帮助。
        -j         只保存文件的名,不保存目录。
        -m         压缩完成以后删除源文件。
        -n<字尾符号>         不压缩特定扩展名的文件。
        -q         不显示压缩命令执行过程。
        -r         递归压缩,将指定目录下的所有文件和子目录一起压缩。
        -v         显示指令执行过程。
        -num         压缩率,为 1~9 的数值。
2、命令 unzip:用于对.zip 格式的压缩包进行解压
unzip [参数 ] [压缩文件名 .zip]
        主要参数如下:
        -l         显示压缩文件内所包含的文件。
        -t         检查压缩文件是否损坏,但不解压。
        -v         显示命令的执行过程。
        -Z         只显示压缩文件的注解。
        -C         压缩文件中的文件名称区分大小写。
        -j         不处理压缩文件中的原有目录路径。
        -L         将压缩文件中的全部文件名改为小写。
        -n         解压缩时不要覆盖原有文件。
        -P<密码>         解压密码。
        -q         静默执行,不显示任何信息。
        -x<文件列表>         指定不要处理.zip 中的哪些文件。
        -d<目录>         把压缩文件解到指定目录下。
3、命令 tar
tar [ 参数 ] [压缩文件名 ] [被压缩文件名 ]
        常用参数如下:
        -c         创建新的压缩文件。
        -C<目的目录>         切换到指定的目录。
        -f<备份文件>         指定压缩文件。
        -j         用 tar 生成压缩文件,然后用 bzip2 进行压缩。
        -k         解开备份文件时,不覆盖已有的文件。
        -m         还原文件时,不变更文件的更改时间。
        -r         新增文件到已存在的备份文件的结尾部分。
        -t         列出备份文件内容。
        -v         显示指令执行过程。
        -w         遭遇问题时先询问用户。
        -x         从备份文件中释放文件,也就是解压缩文件。
        -z         用 tar 生成压缩文件,用 gzip 压缩。
        -Z         用 tar 生成压缩文件,用 compress 压缩。
        例:使用如下两个命令将 test1 文件夹压缩为.bz2 和.gz 这两个格式:
tar -vcjf test1.tar.bz2 test1
tar -vczf test1.tar.gz test1
        -vcjf 表示创建 bz2 格式的压缩文件,-vczf 表示创建.gz 格式的压缩文件。
        例:使用如下所示两行命令完成.bz2 和.gz 格式文件的解压缩:
tar -vxjf test1.tar.bz2
tar -vxzf test2.tar.gz
        -vxjf 用来完成.bz2 格式压缩文件的解压,-vxzf 用来完成.gz 格式压缩文件的解压。

2.6.5 文件查询和搜索(没怎么用过)

1、命令 find

find [路径 ] [参数 ] [关键字 ]

2、命令 grep

grep [ 参数 ] 关键字 文件列表

2.6.6文件类型

        每个文件的详细信息占一行,每行 最前面一个符号 就标记了当前文件类型。
        
        -         普通文件,一些应用程序创建的,比如文档、图片、音乐等等。
        d         目录文件。
        c         字符设备文件,Linux 驱动里面的字符设备驱动,比如串口设备,音频设备等。
        b         块设备文件,存储设备驱动,比如硬盘,U 盘等。
        l         符号连接文件,相当于 Windows 下的快捷方式。
        s         套接字文件。
        p         管道文件,主要指 FIFO 文件。
        后面学习 Linux 驱动开发的时候基本是在和字符设备文件和块设备文件打交道。

2.7 Linux 用户权限管理

2.7.1Ubuntu 用户系统

Ubuntu 下用户类型分为以下 3 类:
        ● 初次创建的用户,此用户可以完成比普通用户更多的功能。
        ● root 用户,系统管理员,系统中的玉皇大帝,拥有至高无上的权利。
        ● 普通用户,安装完操作系统以后被创建的用户。
        以上三种用户,每个用户都有一个 ID 号,称为 UID,操作系统通过 UID 来识别是哪个用户,用户相关信息可以在文件/etc/passwd 中查看到:
cat /etc/passwd

2.7.2权限管理

        Ubuntu 下我们会常跟用户权限打交道,权限就是用户对于系统资源的使用限制情况,root 用户拥有最大的权限,可以为所欲为,装系统的时候创建的用户拥有 root 用户的部分权限,其它普通用户的权限最低。
        做嵌入式开发重点关注的是 文件的权限 问题。
        对于一个文件通常有三种权限:读(r)、写(w)和执行(x),使用命令“ls -l”可以查看某个目录下所有文件的权限信息。
        
        
      以文件 test.c 为例讲解,文件 test.c 文件信息如下:
-rw-rw-r-- 1 wurao wurao 0 10  12 21:14 test.c
        其中“-rw-rw-r--”表示文件权限与用户和用户组之间的关系, 第一位表示文件类型 ,上 一小节已经说了。剩下的 9 位以 3 位为一组 ,分别表示 文件拥有者的权限 文件拥有者所在用户组的权限 以及 其它用户权限 。后面的“wurao wurao”分别代表文件拥有者(用户)和该用户所在的用户组,因此文件 test.c 的权限情况如下:
        ①、文件 test.c 的拥有者是用户 wurao,其对文件 tesst.c 的权限是“rw-”,也就是对该文件拥有读和写两种权限。
        ②、用户 wurao 所在的用户组也叫做 wurao,其组内用户对于文件 test.c 的
权限是“rw-”,也是拥有读和写这两种权限。
        ③、其它用户对于文件 test.c 的权限是“r--”,也就是只读权限。
         对于文件可读权限表示可以打开查看文件内容, 可写权限表示可以对文件进行修改, 可执行权限就是可以运行此文件(如果是软件的话)。
        对于文件夹,拥有 可读权限才可以使用命令ls 查看文件夹中的内容,拥有 可执行权限才能进入到文件夹内部。
        如果某个用户对某个文件 不具有相应的权限的话就不能进行相应的操作,比如根目录“/”下的文件只有 root 用户才有权限进行修改,如果以普通用户去修改的话就会 提示没有权限
        遇到提示权限不够的时候都可以使用 sudo 命令暂时以 root 用户身份去执行。
        文件的权限有三种:读(r)、写(w)和执行(x),除了用 r、w 和 x 表示以外, 我们也可以 使用二进制数表示 ,三种 权限 就可以使用 3 位二进制数来表示,一种权限对应一个 二进制位,如果该位为 1 就表示具备此权限,如果该位为 0 就表示没不具备此权限。

         权限所对应的八进制数字就是每个权限对应的位相加,比如权限 rwx 就是 4+2+1=7。前面的文件 test.c 其权限为“rw-rw-r--”,因此其十进制表示就是:664。

        另外我们也开始使用 a、u、g 和 o 表示文件的归属关系,用=、+和-表示文件权限的变化。

2.7.3 权限管理命令

1、权限修改命令 chmod

chmod [ 参数 ] [文件名 / 目录名 ]
例: 修改文件 test 的权限为 766
chomd 766 test
2、文件归属者修改命令 chown(没怎么用过)
chown [参数 ] [用户名 .< 组名 >] [ 文件名 / 目录 ]

2.8 Linux磁盘管理

2.8.1 Linux磁盘管理基本概念

        在 Windows 下经常会遇到“分区”这个概念,在 Linux 中一般不叫“分区”而叫“ 挂载点”。 “挂载点”就是将一个硬盘的一部分做成文件夹的形式,这个文件夹的名字就是“挂载点”。
文件/etc/fstab 详细的记录了 Ubuntu 中硬盘分区的情况:
cat /etc/fstab
可以通过如 下命令查看当前系统中的磁盘:
ls /dev/sd*

2.8.2 磁盘管理命令

1、磁盘分区命令 fdisk(放在后面详细操作)

fdisk [参数 ]
比如我要对 U 盘(U 盘数据要先做好备份,防止数据丢失)进行分区, 千万不要对自己装
Ubuntu 系统进行分区! 可以使用如下命令:
sudo fdisk /dev/sdb
2、格式化命令 mkfs
3、挂载分区命令 mount
4、卸载命令 umount

三、Linux C 编程入门

        Ubuntu 下也有一些可以进行编程的工具,但是大多都只是编辑器,也就是只能进行代码编辑

        Ubuntu 下要编译的话就需要用到 GCC 编译器,使用 GCC 编译器肯定就要接触到Makefile

3.1 Hello World

        编写代码包括两部分:代码编写编译

        代码编写用 notepad++ (Windows)和 VIM(Ubuntu)。

        编译:GCC 编译器。

3.1.1编写代码

cd ~

mkdir C_Program

cd C_Program

mkdir 3.1

使用 VI 编辑器之前我们先做如下设置:
1、设置 TAB 键为 4 字节
        VI 编辑器默认 TAB 键为 8 空格,我们改成 4 空格,用 vi 打开文件/etc/vim/vimrc,在此文件最后面输入如下代码:
set ts=4
        修改完成以后保存并关闭文件。
2、VIM 编辑器显示行号
        VIM 编辑器默认是不显示行号的,不显示行号不利于代码查看,我们设置 VIM 编辑器显示行号,同样是通过在文件/etc/vim/vimrc 中添加代码来实现,在文件最后面加入下面一行代码即可:
set nu
        VIM 编辑器可以自行定制,网上有很多的博客讲解如何设置 VIM。
        进入前面创建的“3.1”这个工程文 件夹里面,使用 vi 指令创建一个名为“main.c”的文件:
cd 3.1
vi main.c
        然后在里面输入如下代码:
#include <stdio.h>
int main(int argc, char *argv[])
{
    printf("Hello World!\n");
}
        编写完成以后保存退出 vi 编辑器,可以使用“ cat ”命令查看代码是否编写成功:
cat main.c

3.1.2 编译代码

        Ubuntu 下的 C 语言编译器是 GCC,GCC 编译器在我们安装 Ubuntu 的时候就已经默认安装好了,可以通过如下命令查看 GCC 编译器的版本号:

gcc -v

        如果想要 编译在 ARM 上运行的程序就需要针对 ARM 架构的 GCC 编译器,也就是交叉编译器。我们进行 ARM 开发,因此肯定要安装针对 ARM 架构的 GCC 交叉编译器(在后面会用)。
        如何使用 GCC 编译器来编译 main.c 文件呢?
        GCC 编译器是命令模式的,因此需要输入命令来使用 gcc 编译器来编译文件,输入如下命令:
gcc main.c
        当编译完成以后会生成一个 a.out 文件,这个 a.out 就是编译生成的 可执行文件
        
         执行的方法 很简单,使用命令: “ ./可执行文件
        
        a.out 这个文件名是 GCC 编译器自动命名的,自己能决定编译完生成的可执行文件名字:
gcc main.c –o main

3.2 GCC编译器

3.2.1 gcc 命令

        gcc 命 令格式如下:
gcc [ 选项 ] [文件名字 ]
        主要选项如下:
        -c         只编译不链接为可执行文件,编译器将输入的.c 文件编译为.o 的目标文件。
        -o<输出文件名>         用来指定编译结束以后的输出文件名,如果不使用这个选项的话 GCC 默认编译出来的可执行文件名字为 a.out。
        -g         添加调试信息,如果要使用调试工具(如 GDB)的话就必须加入此选项,此选项指示编译的时候生成调试所需的符号信息。
        -O         对程序进行优化编译,如果使用此选项的话整个源代码在编译、链接的的时候都会进行优化,这样产生的可执行文件执行效率就高。
        -O2         比-O 更幅度更大的优化,生成的可执行效率更高,但是整个编译过程会很慢。

3.2.2 编译错误警告

        GCC 编译器和其它编译器一样,不仅能够检测出错误类型,而且标记除了错误发生在哪个文件、哪一行,方便我们去修改代码。

3.2.3 编译流程

        GCC 编译器的编译流程是:预处理、汇编、编译和链接。预处理就是对程序中的宏定义等相关的内容先进行前期的处理。汇编是先将 C 文件转换为汇编文件。当 C 文件转换为汇编文件以后就是文件编译了,编译过程就是将 C 源文件编译成.o 结尾的目标文件。编译生成的.o 文 件不能直接执行,而是需要最后的链接,如果你的工程有很多个 c 源文件的话最终就会有很 多.o 文件,将这些.o 文件链接在一起形成完整的一个可执行文件。

        上一小节演示的例程都只有一个文件,而且文件非常简单,因此可以直接使用 gcc 命令生成可执行文件,并没有先将 c 文件编译成.o 文件,然后在链接在一起。

3.3 Makefile 基础

3.3.1 何为Makefile

3.3.2 Makefile 的引入

3.4 Makefile 语法

3.4.1 Makefile 规则格式

3.4.2 Makefile 变量

3.4.3 Makefile 模式规则

3.4.4 Makefile 自动化变量

3.4.5 Makefile 伪目标

3.4.6 Makefile 条件判断

3.4.7 Makefile 函数使用

本篇总结

        重点是各种shell命令的使用和Makefile

        shell多敲就会了,Makefile还很陌生。

        Makefile 部分内容待整理,整理好更新文章。


网站公告

今日签到

点亮在社区的每一天
去签到