嵌入式系统开发01——Ubuntu系统下C语言程序开发流程

发布于:2022-12-22 ⋅ 阅读:(1160) ⋅ 点赞:(1)

本文主要描述Ubuntu18.04系统下C语言程序的开发流程,具体包括Ubuntu系统安装、虚拟机网络参数的设置、Ubuntu的常用命令、vi/vim的使用、nano的使用、将系统自带的源更换为国内软件源、hello world的编译运行、C语言程序在不同系统环境下实现方式的对比、Makefile的使用

一、环境实验搭建

本文主要是利用Vmware软件实现Ubuntu系统下的C语言程序,需要用到VMware Workstation Pro以及Ubuntu 18.04镜像文件。

1、安装VMware workstation软件

通过安装包安装VMware workstation软件,安装完成后通过VMKeygen获得并输入许可证,在D盘创建以虚拟机命名的文件夹,在文件夹中建立共享文件夹。
修改虚拟机的默认位置
在软件中,修改虚拟机默认位置,点击编辑->首选项->工作区 ,将虚拟机的默认位置改为D:\虚拟机
修改共享虚拟机位置
修改共享虚拟机位置,点击共享虚拟机(已弃用)->更改设置,将共享虚拟机位置改为D:\虚拟机\共享
此时可能会一直显示正在检索共享虚拟机的位置…可能是因为计算机名中带有汉字引起的,此时需要修改重命名这台电脑,只需要点击设置->系统->系统信息->重命名这台电脑,将计算机名改为全英文并重启计算机,此时共享虚拟机就可以正常启用了

这样就基本上完成了Vmware软件的设置了。

2、安装Ubuntu server18.04

1、下载Ubuntu sever18.04镜像文件,在VMware workstation中,创建新的虚拟机
2、选择自定义,点击下一步
3、选择虚拟硬件兼容性workstation16x,点击下一步
4、选择Linux客户机操作系统,版本为Ubuntu64位,点击下一步
5、设置虚拟机名称为Ubuntu server18.04,存储在对应位置,点击下一步
6、设置处理器数量为1和每个处理器内核数量为4(处理器数量和内核数量相乘必须小于物理机的逻辑处理器数量,物理机的逻辑处理器可以在 任务管理器->性能 中查看),点击下一步
查看逻辑处理器的数量
7、分配内存1GB,点击下一步
8、选择虚拟机网络类型为NAT,点击下一步
9、选择I/O控制器类型,SCSI控制器选为LSL Logic (L),点击下一步
10、选择磁盘类型,虚拟磁盘类型选为SCSI(S),点击下一步
11、选择创建新的虚拟磁盘,点击下一步
12、 最大磁盘大小选择为20GB,选择将虚拟磁盘拆分成多个文件,点击下一步
13、确定磁盘文件名,点击下一步
14、选择自定义设置,选择新的磁盘镜像文件并添加,则创建完成。
自定义设置
15、接着打开虚拟机完成后续设置就可以了
注意:
1.在Install OpenSSH server处一定要勾选
2.在Ubuntu安装完成后,登录用户并输入
sudo su 命令并再次输入密码获取root权限,输入 apt update 命令更新软件列表和软件包
3.建议上诉设置完成后创建快照,便于在后续操作出现失误时回到该结点位置,依次点击
虚拟机->快照->拍摄快照 完成快照拍摄

二、设置网络参数

修改虚拟机网络
通过虚拟网络编辑器修改虚拟机网络,点击 更改设置 获得管理员权限,将 VMnet0 设置为 桥接模式 ,将 VMnet1 设置为 仅主机模式 ,将 VMnet8 设置为 NAT模式

三、Ubuntu常用命令

主要涉及到后续操作可能涉及的命令。

1、cp命令

功能
Linux cp(英文全拼:copy file)命令主要用于 复制文件或目录

命令参数详情
cp命令的语法:
cp [options] source dest或cp [options] source… directory

参数说明:

命令 作用
-a 此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合
-d 复制时保留链接。这里所说的链接相当于 Windows 系统中的快捷方式
-f 覆盖已经存在的目标文件而不给出提示
-i 与-f选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答y时目标文件将被覆盖
-p 除复制文件的内容外,还把修改时间和访问权限也复制到新文件中
-r 若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件
-l 不复制文件,只是生成链接文件

应用实例

cp命令

2、cd命令

功能
Linux cd(英文全拼:change directory)命令用于 切换当前工作目录

命令参数详情
cd命令的语法:cd [dirName]
dirName:要切换的目标目录。
其中 dirName 表示法可为绝对路径或相对路径。若目录名称省略,则变换至使用者的 home 目录 (也就是刚 login 时所在的目录)。
另外,~ 也表示为 home 目录 的意思, . 则是表示目前所在的目录, . . 则表示目前目录位置的上一层目录。

应用实例
跳到 /usr/bin/ : cd /usr/bin
跳到自己的 home 目录 : cd ~
跳到目前目录的上上两层 : cd . ./. .
cd命令

3、pwd命令

功能
Linux pwd(英文全拼:print work directory) 命令用于 显示工作目录
执行 pwd 指令可立刻得知您目前所在的工作目录的绝对路径名称。
命令参数详情
pwd命令的语法:pwd [参数]
参数说明:

命令 作用
- -help 在线帮助
- -version 显示版本信息

应用实例
查看当前所在目录:pwd
pwd命令

4、exit命令

功能
Linux exit命令用于 退出目前的shell
执行exit可使shell以指定的状态值退出。若不设置状态值参数,则shell以预设值退出。状态值0代表执行成功,其他值代表执行失败。exit也可用在script,离开正在执行的script,回到shell。
命令参数详情
exit命令的语法:exit [状态值]
应用实例
退出用户:
exit命令
退出成功

5、ifconfig命令

功能
Linux ifconfig命令用于 显示或设置网络设备 。ifconfig可设置网络设备的状态,或是显示目前的设置。

命令参数详情
ifconfig命令的语法:
ifconfig [网络设备][down up -allmulti -arp -promisc][add<地址>][del<地址>][<hw<网络设备类型><硬件地址>][io_addr<I/O地址>][irq<IRQ地址>][media<网络媒介类型>][mem_start<内存地址>][metric<数目>][mtu<字节>][netmask<子网掩码>][tunnel<地址>][-broadcast<地址>][-pointopoint<地址>][IP地址]

参数说明:

参数 解释
add<地址> 设置网络设备IPv6的IP地址
del<地址> 删除网络设备IPv6的IP地址
down 关闭指定的网络设备
<hw<网络设备类型><硬件地址> 设置网络设备的类型与硬件地址
io_addr<I/O地址> 设置网络设备的I/O地址
irq<IRQ地址> 设置网络设备的IRQ
media<网络媒介类型> 设置网络设备的媒介类型
mem_start<内存地址> 设置网络设备在主内存所占用的起始地址
metric<数目> 指定在计算数据包的转送次数时,所要加上的数目
mtu<字节> 设置网络设备的MTU
netmask<子网掩码> 设置网络设备的子网掩码
tunnel<地址> 建立IPv4与IPv6之间的隧道通信地址
up 启动指定的网络设备
-broadcast<地址> 将要送往指定地址的数据包当成广播数据包来处理
-pointopoint<地址> 与指定地址的网络设备建立直接连线,此模式具有保密功能
-promisc 关闭或启动指定网络设备的promiscuous模式
[IP地址] 指定网络设备的IP地址
[网络设备] 指定网络设备的名称

应用实例
启动或关闭指定网卡:
ifconfig eth0 down
ifconfig eth0 up
为网卡配置和删除IPv6地址
ifconfig eth0 add 33ffe:3240:800:1005::2/ 64 //为网卡设置IPv6地址
ifconfig eth0 del 33ffe:3240:800:1005::2/ 64 //为网卡删除IPv6地址

6、ping命令

功能
Linux ping 命令用于 检测主机
执行 ping 指令会使用 ICMP 传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。
命令参数详情
ping命令的语法:
ping [-dfnqrRv][-c<完成次数>][-i<间隔秒数>][-I<网络界面>][-l<前置载入>][-p<范本样式>][-s<数据包大小>][-t<存活数值>][主机名称或IP地址]

参数说明:

参数 作用
-d 使用Socket的SO_DEBUG功能
-c <完成次数> 设置完成要求回应的次数
-f 极限检测
-i<间隔秒数> 指定收发信息的间隔时间
-I<网络界面> 使用指定的网络接口送出数据包
-l<前置载入> 设置在送出要求信息之前,先行发出的数据包
-n 只输出数值
-p<范本样式> 设置填满数据包的范本样式
-q 不显示指令执行过程,开头和结尾的相关信息除外
-r 忽略普通的Routing Table,直接将数据包送到远端主机上
-R 记录路由过程
-s<数据包大小> 设置数据包的大小
-t<存活数值> 设置存活数值TTL的大小
-v 详细显示指令的执行过程
-w deadline 在 deadline 秒后退出
-W timeout 在等待 timeout 秒后开始执行

应用实例
ping命令

7、sudo命令

功能
Linux sudo命令 以系统管理者的身份执行指令 ,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行。

命令参数详情
sudo命令的语法:
sudo -V
sudo -h
sudo -l
sudo -v
sudo -k
sudo -s
sudo -H
sudo [ -b ] [ -p prompt ] [ -u username/#uid] -s
sudo command

参数说明:

命令 作用
-V 显示版本编号
-h 会显示版本编号及指令的使用方式说明
-l 显示出自己(执行 sudo 的使用者)的权限
-v 因为 sudo 在第一次执行时或是在 N 分钟内没有执行(N 预设为五)会问密码,这个参数是重新做一次确认,如果超过 N 分钟,也会问密码
-k 将会强迫使用者在下一次执行 sudo 时问密码(不论有没有超过 N 分钟)
-b 将要执行的指令放在背景执行
-p prompt 可以更改问密码的提示语,其中 %u 会代换为使用者的帐号名称, %h 会显示主机名称
-u username/#uid 不加此参数,代表要以 root 的身份执行指令,而加了此参数,可以以 username 的身份执行指令(#uid 为该 username 的使用者号码)
-s 执行环境变数中的 SHELL 所指定的 shell ,或是 /etc/passwd 里所指定的 shell
-H 将环境变数中的 HOME (家目录)指定为要变更身份的使用者家目录(如不加 -u 参数就是系统管理者 root )
command 要以系统管理者身份(或以 -u 更改为其他人)执行的指令

应用实例
显示出自己的权限:
sudo命令

8、 passwd命令

功能
Linux passwd命令用来更改使用者的密码

命令参数详情
passwd命令的语法:passwd [-k] [-l] [-u [-f]] [-d] [-S] [username]

必要参数:

参数 作用
-d 删除密码
-f 强迫用户下次登录时必须修改口令
-w 口令要到期提前警告的天数
-k 更新只能发送在过期之后
-l 停止账号使用
-S 显示密码信息
-u 启用已被停止的账户
-x 指定口令最长存活期
-g 修改群组密码
-i 口令过期后多少天停用账户

选择参数:

参数 作用
- -help 显示帮助信息
- -version 显示版本信息

应用实例
修改用户密码:
修改密码
显示账号密码信息:
显示账号密码信息

四、vi/vim的使用

1、vi/vim概述

vi(visual editor)编辑器通常被简称为vi,它是Linux和Unix系统上最基本的文本编辑器,类似于Windows 系统下的notepad(记事本)编辑器。
vim是一个由vi增强版的编辑工具,是一个开源免费的软件,它功能丰富,使用快捷,应用广泛。vim也是大多数linux系统上的默认编辑器,用于对文本文件进行建立,显示,编辑,删除,复制等操作,需要用命令进行控制。
vim工作模式可分为三种,即——命令模式,编辑模式,末行模式
1. 命令模式:可以用vim加上任意一个已经存在或是想创建的文件名,如果系统还不存在该文件,就意味着创建文件,如果系统存在该文件,就意味着编辑该文件。此时就可以进入vim的默认模式—命令模式。此时vim等待输入正确的命令,键入的每一个字符都会当作命令来处理。
2. 插入模式:在进入命令模式之后,按下 a i o等键可进入插入模式。进入插入模式后可以对文件进行编辑,左下角出现INSERT
3. 末行模式:在进入末行模式前先按下【Esc】确认处于命令模式后,按下冒号【:】,即可进入末行模式

2、常用操作:

1、进入Vim:
在系统光标提示符后,输入vim及文件名后,回车,进入Vim编辑画面

  vim 1.c 

vim 1.c
注意:进入vim之后,是处于命令行模式,要切换到插入模式,才能够输入文字
2、切换至插入模式编辑文件:
在命令行模式下按一下字母「i」就可以进入插入模式,这时候就可以开始输入了
i
3、插入模式切换到命令行模式:
在插入模式下,按一下「ESC」键即可
命令行模式
4、退出vim及保存文件:
在命令行模式下,按冒号「:」键,进入底行模式
退出vim
常见底行模式下的命令行:

命令 作用
:w filename 文件以filename为文件名保存
:wq 文件存盘并退出vim
:q 文件不存盘并退出vim
:q! 文件不存盘强制退出vim

5、命令行模式下的功能键
(1)从命令行模式切换为插入模式的三种方式:

项目 Value
「 i 」 从当前光标位置进入插入模式
「a 」 从当前光标位置的下一个字符进入插入模式
「o 」 从当前光标位置的下一行进入插入模式

(2)移动光标:
小写英文字母「h」「j」「k」「l」,分别控制光标左、下、上、右移一格
(3)行尾追加:
不管光标在该行的什么位置,直接按大写字母「A」即可
(4)从当前光标处删除到行末:把光标停留在需要删除的句子前面,依次按下「d」「$」即可
(5)快速跳转到行首:
按下数字「0」,即可
(6)撤销更改:
按小写字母「u」,撤销上一步的更改操作
按大写字母「U」,撤销整行的更改操作
「Ctrl+R」撤销上一步「撤销操作」

五、nano的使用

1、nano概述

nano是一个字符终端的文本编辑器,有点像DOS下的editor程序。它比vi/vim要简单得多,比较适合Linux初学者使用。某些Linux发行版的默认编辑器就是nano。
nano命令可以打开指定文件进行编辑,默认情况下它会自动断行,即在一行中输入过长的内容时自动拆分成几行,但用这种方式来处理某些文件可能会带来问题,比如Linux系统的配置文件,自动断行就会使本来只能写在一行上的内容折断成多行了,有可能造成系统不灵了。因此,如果你想避免这种情况出现,就加上-w选项吧。

2、语法格式:

Nano [选项] [[+行,列]文件名]…
光标控制:
移动光标:使用用方向键移动
选择文字:按住鼠标左键拖到

复制、剪贴和粘贴:
复制一整行:Alt+6
剪贴一整行:Ctrl+K
粘贴:Ctrl+U
如果需要复制/剪贴多行或者一行中的一部分,先将光标移动到需要复制/剪贴的文本的开头,按Ctrl+6(或者Alt+A)做标记,然后移动光标到 待复制/剪贴的文本末尾。这时选定的文本会反白,用Alt+6来复制,Ctrl+K来剪贴。若在选择文本过程中要取消,只需要再按一次Ctrl+6。
搜索:
按Ctrl+W,然后输入你要搜索的关键字,回车确定。这将会定位到第一个匹配的文本,接着可以用Alt+W来定位到下一个匹配的文本。

翻页:
Ctrl+Y到上一页
Ctrl+V到下一页

保存:
使用Ctrl+O来保存所做的修改

退出:
按Ctrl+X
如果你修改了文件,下面会询问你是否需要保存修改。输入Y确认保存,输入N不保存,按Ctrl+C取消返回。如果输入了Y,下一步会让你输入想要保存的文件名。如果不需要修改文件名直接回车就行;若想要保存成别的名字(也就是另存为)则输入新名称然后确定。这个时候也可用Ctrl+C来取消返回。

六、将系统自带的源更换为国内软件源

ubuntu自带的软件源服务器在国外,国内访问卡,更换成阿里云源提高apt 安装速度。

1、查看ubuntu的Codename

lsb_release -a

Codename

2、备份系统源

cd /etc/apt
sudo cp sources.list sources.list.bak

输入密码获得管理员权限,备份系统源
备份系统源

3、写入阿里云的源

nano sources.list

sources.list
长按 Ctrl+K 将sources.list里面的文字全部删除。

下面源信息中$Codename为第一步中系统的Codename,用记事本批量替换即可。

deb http://mirrors.aliyun.com/ubuntu/ $Codename main multiverse restricted universe
deb http://mirrors.aliyun.com/ubuntu/ $Codename-backports main multiverse restricted universe
deb http://mirrors.aliyun.com/ubuntu/ $Codename-proposed main multiverse restricted universe
deb http://mirrors.aliyun.com/ubuntu/ $Codename-security main multiverse restricted universe
deb http://mirrors.aliyun.com/ubuntu/ $Codename-updates main multiverse restricted universe
deb-src http://mirrors.aliyun.com/ubuntu/ $Codename main multiverse restricted universe
deb-src http://mirrors.aliyun.com/ubuntu/ $Codename-backports main multiverse restricted universe
deb-src http://mirrors.aliyun.com/ubuntu/ $Codename-proposed main multiverse restricted universe
deb-src http://mirrors.aliyun.com/ubuntu/ $Codename-security main multiverse restricted universe
deb-src http://mirrors.aliyun.com/ubuntu/ $Codename-updates main multiverse restricted universe

复制上面的文本,用记事本打开,点击编辑->替换,在搜索栏输入$Codename,下方输入开始查询到的Codename,如18.04就是bionic,点击全部替换,并将记事本中替换后的文本复制到剪切板。
替换codename
替换成功
在VMware里面依次点击编辑->粘贴,文本会自动输入到sources.list中
粘贴
点击Ctrl+x,输入y确认退出,然后点击一次回车,就成功将阿里源写入了sources.list

4、执行更新

apt-get update

在命令行输入 apt-get update ,完成软件更新
更新软件

七、gcc的使用

1、gcc概述

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

2、gcc的基本用法

GCC最基本的用法是∶

gcc [options] [filenames]

其中options就是编译器所需要的参数,filenames给出相关的文件名称。在使用GCC编译器的时候,我们必须给出一系列必要的调用参数和文件名称。

参数 作用 注意
-c 只编译,不链接成为可执行文件
-o output_filename 确定输出文件的名称为output_filename 这个名称不能和源文件同名。如果不给出这个选项,gcc就给出预设的可执行文件a.out
-g 产生符号调试工具(GNU的gdb)所必要的符号资讯 想对源代码进行调试,必须加入这个选项
-O 对程序进行优化编译、链接 编译、链接的速度相应地要慢一些
-O2 比-O更好的优化编译、链接 整个编译、链接过程会更慢。
-I dirname 将dirname所指出的目录加入到程序头文件目录列表中 在预编译过程中使用的参数
-v gcc执行时执行的详细过程,gcc及其相关程序的版本号
文件名 解释
.c C语言源代码文件
.a 由目标文件构成的档案库文件
.C C++源代码文件且必须要经过预处理
.h 程序所包含的头文件
.i C源代码文件且不应该对其执行预处理
.ii C++源代码文件且不应该对其执行预处理
.m Objective-C源代码文件
.mm Objective-C++源代码文件
.o 编译后的目标文件
.s 汇编语言源代码文件
.S 经过预编译的汇编语言源代码文件

注意:当[options]缺省时,gcc会将文件经预处理、汇编、编译并链接形成可执行文件。

3、gcc的执行过程

使用gcc由C语言源代码文件生成可执行文件需要经历预处理、编译、汇编和连接
命令gcc首先调用cpp进行 预处理 ,在预处理过程中,对源代码文件中的文件包含(include)、预编译语句(如宏定义define等)进行分析。接着进行编译,根据输入文件生成以.o为后缀的目标文件。汇编过程是针对汇编语言的步骤,.S 为后缀的汇编语言源代码文件和汇编 .s 为后缀的汇编语言文件经过预编译和汇编之后都生成以 .o 为后缀的目标文件。当所有的目标文件都生成之后,gcc将所有的目标文件安排在可执行程序中的恰当的位置,同时,该程序所调用到的库函数也从各自所在的档案库中连到合适的地方。

4、下载gcc

当在命令行输入gcc时,如果显示如下信息:
未安装gcc
则表示未安装gcc,只需要根据提示在命令行输入sudo apt install gcc,gcc就会在输入密码后找到gcc的安装包并提示安装信息,确认继续后就会自动安装到虚拟机上。此时输入gcc则会提醒no input files
安装完成

八、hello world的编译运行

1、编写源代码文件hello.c

在命令行输入 vim hello.c 创建源代码文件,点击 [i] 进入插入模式,在 hello.c 文件中输入源代码,代码编辑完成后输入 [Esc] 进入命令模式,此时我们需要输入:wq 保存代码并回到命令行。
hello.c

2、生成可执行文件

步骤 命令
预编译阶段 gcc -E hello.c -o hello.i
编译阶段 gcc -S hello.i -o hello.s
汇编阶段 gcc -c hello.s -o hello.o
链接阶段 gcc hello.o -o hello

经过上述操作后便生成执行可执行文件 hello.c
在这里插入图片描述

3、运行可执行文件

在命令行输入 ./hello 即可实现输出 Hello world!
hello world
至此,就实现了 在Ubuntu系统下用C语言编写一个简单的输出 hello word 的程序,并编译有、运行之 的任务

九、不同系统环境下实现C语言程序的对比

1、要求

编写一个主程序文件 main1.c 和一个子程序文件 sub1.c, 要求:子程序sub1.c 包含一个算术运算函数 float x2x(int a,int b),此函数功能为对两个输入整型参数做某个运算,将结果做浮点数返回;主程序main1.c,定义并赋值两整型变量,然后调用函数 x2x,将x2x的返回结果printf出来。

2、在ubuntu系统用gcc 命令行方式实现

编写sub1.c

x2x实现两个数相加

#include <stdio.h>
float x2x(int a, int b)
{
  return a+b;
}

编写main1.c

#include <stdio.h>
int main()
{
  int a=10,b=8;
  float num=0;
  num=x2x(a,b);
  printf("%f\n",num);
  return 0;
}

编译

gcc main1.c sub1.c -o main1

运行

./main1

Ubuntu实现

3、在windows系统下用Visual studio 2019实现

编写sub1.c

#include <stdio.h>
using namespace std;
float x2x(int a, int b)
{
	return a + b;
}

编写main1.c

#include <stdio.h>
#include "sub1.h"
using namespace std;
int main()
{
	int a = 10, b = 8;
	float num = 0;
	num = x2x(a, b);
	printf("%f\n", num);
	return 0;
}

编写sub1.h

#pragma once
#ifndef _SUB1_H_
#define _SUB1_H_
float x2x(int a, int b);
#endif

调试

调试成功

总结

在Ubuntu系统上通过 gcc命令 实现 main1.c 文件对 sub1.c 文件的调用只需要通过 gcc main1.c sub1.c -o main1 即可实现,而在Windows上通过 Visual Studio 来实现则需要另外编写 sub1.h来解决。在我看来,在Ubuntu系统上通过 gcc命令 实现一个.c文件对另一个.c文件的调用要比在Windows上通过 Visual Studio 上容易。

十、Makefile的使用

Makefile简介

makefile 文件中定义了一系列的规则来指定, 哪些文件需要先编译, 哪些文件需要后编译, 哪些文件需要重新编译, 甚至于进行更复杂的功能操作。makefile 需要配合 make 指令进行自动化编译。make 是一个命令工具,用来解释 makefile 文件中的代码,从而实现自动化编译。

安装Make

输入命令sudo apt-get install make即可完成安装
安装make

makefile规则

target ... : prerequisites ...
command
...
...
目标:依赖
执行指令 ...

target是一个目标文件(所要生成的文件)
prerequisites就是,要生成那个target所需要的文件或是目标。
command也就是make需要执行的命令。(任意的Shell命令)
这是一个文件的依赖关系,也就是说,target这一个或多个的目标文件依赖于prerequisites中的文件,其生成规则定义在command中。
command一定要以Tab键开始,否则编译器无法识别command

编写makefile

输入vim makefile,编辑makefile,编写完成后输入 [Esc]->:wq->Enter 保存并退出vim

main1: main1.o sub1.o
	gcc -o main1 main1.o sub1.o
main1.o: main1.c sub1.c
	gcc -c main1.c -o  main1.o
sub1.o: sub1.c
	gcc -c sub1.c -o  sub1.o

makefile

编译并运行

命令行输入 make 进行编译,生成可执行文件main1,命令行输入./main1运行可执行main1
编译运行

总结

通过本次作业,我不仅复习了一些掌握了Linux的知识,还学习到不少新的知识。同时,在本次完成作业的过程中,我还认识到了自己Linux学习的不足与短板,希望在接下来的嵌入式系统的学习中,通过听讲和查询资料来不断完善自己的知识体系。


参考列表:
1.https://blog.csdn.net/qq_46467126/article/details/120279485?spm=1001.2014.3001.5502
2.markdown教程
3.Linux Vim编辑器的基本使用
4.Ubuntu 快速更换阿里源
5.gcc简介
6.gcc详解
7.Linux下gcc编译器的安装与使用
8.Makefile的介绍与工作原理

本文含有隐藏内容,请 开通VIP 后查看