Linux操作系统使用及C高级编程

一、Linux介绍及环境配置

Linux介绍及环境配置

一、UNIX、LINUX和GNU简介

1、UNIX简介

Linux操作系统使用及C高级编程_第1张图片

2、Linux

Linux操作系统使用及C高级编程_第2张图片

1)操作系统内核+软件=操作系统

2)操作系统内核-能统一的管理硬件了

3)基于UNIX,UNIX不开源,对硬件要求专一,因此出现了Linux

3、GNU

Linux操作系统使用及C高级编程_第3张图片

Linux=linux内核+软件

二、环境介绍

Linux操作系统使用及C高级编程_第4张图片

三、解压文件

四、网络配置

Linux操作系统使用及C高级编程_第5张图片

1、桥接模式-和开发板通信首选,可以访问外网

Linux操作系统使用及C高级编程_第6张图片

局域网内可以、校园网或公司内网不可以

2、nat模式-访问外网首选,不能访问局域,不能和板子通信

主机虚拟出来的虚拟机

可以访问外网,但不能通过外网访问虚拟机

Linux操作系统使用及C高级编程_第7张图片

如果是校园网下载软件可以选择nat模式

3、仅主机模式-不能访问外网,也不能访问局域网

了解即可

4、网络配置

编辑-虚拟网络编辑器-还原默认设置(每次配置前还原)

1)先在虚拟网路编辑器设置

Linux操作系统使用及C高级编程_第8张图片

Linux操作系统使用及C高级编程_第9张图片

2)在网络适配器使用

Linux操作系统使用及C高级编程_第10张图片

重新配置

Linux操作系统使用及C高级编程_第11张图片

Linux操作系统使用及C高级编程_第12张图片

Linux操作系统使用及C高级编程_第13张图片

Linux操作系统使用及C高级编程_第14张图片

Linux操作系统使用及C高级编程_第15张图片

5、在浏览器中可以打开

Linux操作系统使用及C高级编程_第16张图片

如果打不开:设置DNS

Linux操作系统使用及C高级编程_第17张图片

默认网关一般是ip最后变成.1

二、软件包管理

一、软件包管理

(一)流行的软件包管理机制

1、APT软件包优点

1)检查和修复软件包依赖关系

2)在线获取软件包

(二)软件包的类型

1、二进制(deb)和源码包(deb-src)

Linux操作系统使用及C高级编程_第18张图片

2、file 文件包名-查看软件包类型

Linux操作系统使用及C高级编程_第19张图片

file命令-查看

3、软件包的命名

Linux操作系统使用及C高级编程_第20张图片

4、软件包的命名

Linux操作系统使用及C高级编程_第21张图片

Linux操作系统使用及C高级编程_第22张图片

二、在线软件包管理

(一)APT的工作原理

Linux操作系统使用及C高级编程_第23张图片

(二)更新软件源

Linux操作系统使用及C高级编程_第24张图片

1、vi 软件包:直接更改

2、图形界面更换软件源

Linux操作系统使用及C高级编程_第25张图片

Linux操作系统使用及C高级编程_第26张图片

Linux操作系统使用及C高级编程_第27张图片

3、更新完软件包之后要用sudo apt-get update更新(要保证网络通畅)

Linux操作系统使用及C高级编程_第28张图片

(三)APT相关命令

Linux操作系统使用及C高级编程_第29张图片

三、离线软件包管理

在安装和删除时需要sudo超级用户权限

 dpkg命令

Linux操作系统使用及C高级编程_第30张图片

注意删除的时候跟的是软件名不是软件包名

三、linux shell命令(文件搜索、文件处理、压缩解压)

一、查看文件相关命令

(一)查看命令

1、cat命令:从前往后读

cat+文件:显示代码

cat/cat -:输入什么输出什么

2、tac命令:从后往前读

3、more命令:显示打印了多少(只能向前,不能向后)

Linux操作系统使用及C高级编程_第31张图片

Linux操作系统使用及C高级编程_第32张图片

Linux操作系统使用及C高级编程_第33张图片

4、less +文件

上下键控制 q退出

Linux操作系统使用及C高级编程_第34张图片

5、head+文件名:默认显示前10行

(二)硬链接和软链接

Linux操作系统使用及C高级编程_第35张图片

1、创建链接的方式 

硬链接 :ln 文件名 硬链接名

通过硬链接可以修改文件的内容

Linux操作系统使用及C高级编程_第36张图片

软连接: ln -s 文件名 软连接名

Linux操作系统使用及C高级编程_第37张图片

inode号

Linux操作系统使用及C高级编程_第38张图片

2、将原来的文件移动(硬链接的优点)

Linux操作系统使用及C高级编程_第39张图片

Linux操作系统使用及C高级编程_第40张图片

Linux操作系统使用及C高级编程_第41张图片

3、从新移动回原文件

Linux操作系统使用及C高级编程_第42张图片

4、如果删除原文件,创建同名文件(软链接的优点)

Linux操作系统使用及C高级编程_第43张图片

二、文件搜索相关命令

(一)查找文件

Linux操作系统使用及C高级编程_第44张图片

1、按名查找

忽略大小写

2、按类型查找

Linux操作系统使用及C高级编程_第45张图片

3、符合条件

Linux操作系统使用及C高级编程_第46张图片

Linux操作系统使用及C高级编程_第47张图片

Linux操作系统使用及C高级编程_第48张图片

(二)查找文件内容

Linux操作系统使用及C高级编程_第49张图片

Linux操作系统使用及C高级编程_第50张图片

Linux操作系统使用及C高级编程_第51张图片

(三)其他相关命令

Linux操作系统使用及C高级编程_第52张图片

Linux操作系统使用及C高级编程_第53张图片

三、文件处理相关命令

1、cut命令

Linux操作系统使用及C高级编程_第54张图片

Linux操作系统使用及C高级编程_第55张图片

2、sed命令 修改

Linux操作系统使用及C高级编程_第56张图片

Linux操作系统使用及C高级编程_第57张图片

1、打印指定行 -n

Linux操作系统使用及C高级编程_第58张图片

2、删除指定行(不加-i,只在预览中可以看,加了-i,实际的文件会修改)

1)预览删除

2)实际删除

3、追加 a

1)在第一行追加hi

4、在当前行进行插入 i

5、替换 s(g表示的是全篇)

Linux操作系统使用及C高级编程_第59张图片

3、awk命令(按列操作)(默认以空格为分割)

Linux操作系统使用及C高级编程_第60张图片

1)打印行号个第一个字段

Linux操作系统使用及C高级编程_第61张图片

2)打印列数和第三个字段

Linux操作系统使用及C高级编程_第62张图片

3)打印最后一列

Linux操作系统使用及C高级编程_第63张图片

4)指定分隔符‘:’

5)第一行是linux的都打印出来

四、解压缩相关命令

(一)解压缩文件的意义

Linux操作系统使用及C高级编程_第64张图片

Linux操作系统使用及C高级编程_第65张图片

(二)解压缩相关的命令

Linux操作系统使用及C高级编程_第66张图片

1、移植性好,但不能归档只能压缩单个文件,不能压缩目录

分别压缩和解压,不会归档

Linux操作系统使用及C高级编程_第67张图片

2、

*解压全部bz2适配的压缩包

3、可以压缩目录,保留源文件;方便在Linux和windows间交换文件

Linux操作系统使用及C高级编程_第68张图片

Linux操作系统使用及C高级编程_第69张图片

Linux操作系统使用及C高级编程_第70张图片

4、zip保留源文件

Linux操作系统使用及C高级编程_第71张图片

5、tar:合并归档+压缩

Linux操作系统使用及C高级编程_第72张图片

Linux操作系统使用及C高级编程_第73张图片

Linux操作系统使用及C高级编程_第74张图片

四、linux shell命令(进程管理、用户管理)

一、进程管理相关命令

(一)进程的概念

1、进程的概念

Linux操作系统使用及C高级编程_第75张图片

 程序没有生命,进程有生命

(二)查看进程的命令

1、查看进程的命令-ps

Linux操作系统使用及C高级编程_第76张图片

PID是进程的唯一标识

Linux操作系统使用及C高级编程_第77张图片

PPID展示的是进程的父进程

Linux操作系统使用及C高级编程_第78张图片

Linux操作系统使用及C高级编程_第79张图片

2、top 实时查看进程 q退出

Linux操作系统使用及C高级编程_第80张图片

3、pstree-进程的子父信息以树状图的形式展开

Linux操作系统使用及C高级编程_第81张图片

(三)发送信号命令

Linux操作系统使用及C高级编程_第82张图片

Linux操作系统使用及C高级编程_第83张图片

二、用户管理相关命令

(一)用户管理相关文件介绍

Linux操作系统使用及C高级编程_第84张图片

Linux操作系统使用及C高级编程_第85张图片

Linux操作系统使用及C高级编程_第86张图片

(二)用户管理相关命令介绍

1、创建用户

Linux操作系统使用及C高级编程_第87张图片

在/etc/passwd中

2、修改用户密码

3、修改组名

Linux操作系统使用及C高级编程_第88张图片

4、修改家目录(修改路径)

Linux操作系统使用及C高级编程_第89张图片

既修改目录又修改用户名

-d:修改路径

-l:修改用户名

5、删除

五、linux shell脚本编程(概念、变量、语句)

一、shell脚本概述

(一)shell脚本概述

Linux操作系统使用及C高级编程_第90张图片

(二)shell脚本编写流程

Linux操作系统使用及C高级编程_第91张图片

1、先对命令进行测试

命令没有问题再写进集合中

本质上是shell命令的集合

2、第一个shell文件

Linux操作系统使用及C高级编程_第92张图片

3、shell脚本以.sh结尾

4、注释行#

一般shell脚本先要说明一下shell的版本

5、shell脚本是一个解释性的语言,不需要编译,边执行边检查错误

6、执行shell脚本:

1)bash+文件名

2)source+文件名

3)./shell.sh(前提是有执行权限)

二、shell脚本变量上

(一)变量的介绍

Linux操作系统使用及C高级编程_第93张图片

(二)变量的作用

Linux操作系统使用及C高级编程_第94张图片

环境变量、系统变量(bash)、自定义变量

(三)变量的命名要求

Linux操作系统使用及C高级编程_第95张图片

(四)变量的分类

Linux操作系统使用及C高级编程_第96张图片

1、定义变量的两种方式(在shell脚本下变量用大写)

注意在shell脚本下,等号的赋值前后是没有空格的

Linux操作系统使用及C高级编程_第97张图片

1)直接在终端定义

Linux操作系统使用及C高级编程_第98张图片

2)在代码中

2、删除变量unset(echo自带一个换行)

三、shell脚本变量下

(一)用户自定义变量

Linux操作系统使用及C高级编程_第99张图片

1、单引号和双引号

2、为变量赋另外一个变量的值的两种方式

1)反撇号(英文状态下)

Linux操作系统使用及C高级编程_第100张图片

2)双重$

Linux操作系统使用及C高级编程_第101张图片

3、数组

Linux操作系统使用及C高级编程_第102张图片

Linux操作系统使用及C高级编程_第103张图片

4、取消高亮

命令界面:noh

(二)只读变量(适用于变量或者文件名不能被修改)

Linux操作系统使用及C高级编程_第104张图片

1、只读变量可以被打印

Linux操作系统使用及C高级编程_第105张图片

2、只读变量不能被修改

Linux操作系统使用及C高级编程_第106张图片

3、只读变量不能被删除

4、只读变量只能强制关闭终端

(三)位置变量和预定义变量

Linux操作系统使用及C高级编程_第107张图片

1、$@:是依次显示每一个数据

$*:是作为一组输出

Linux操作系统使用及C高级编程_第108张图片

(四)环境变量

Linux操作系统使用及C高级编程_第109张图片

Linux操作系统使用及C高级编程_第110张图片

四、shell语句

(一)shell程序

Linux操作系统使用及C高级编程_第111张图片

(二)说明性语句-解释语句

1、

Linux操作系统使用及C高级编程_第112张图片

(三)功能性语句

Linux操作系统使用及C高级编程_第113张图片

Linux操作系统使用及C高级编程_第114张图片

以空格隔开

Linux操作系统使用及C高级编程_第115张图片

Linux操作系统使用及C高级编程_第116张图片

Linux操作系统使用及C高级编程_第117张图片

2、

Linux操作系统使用及C高级编程_第118张图片

``命令置换符

赋值符号=两边不加空格

加减号+/-两边要加空格

乘号比较特殊需要转译 \*

Linux操作系统使用及C高级编程_第119张图片

3、

Linux操作系统使用及C高级编程_第120张图片

Linux操作系统使用及C高级编程_第121张图片

1)测试字符串是否相等

相等为0

Linux操作系统使用及C高级编程_第122张图片

不相等为1

Linux操作系统使用及C高级编程_第123张图片

2)-z 测试字符串长度是否为0

Linux操作系统使用及C高级编程_第124张图片

Linux操作系统使用及C高级编程_第125张图片

3)-n 测试字符串长度是否不为0

Linux操作系统使用及C高级编程_第126张图片 

4、整数测试

Linux操作系统使用及C高级编程_第127张图片

Linux操作系统使用及C高级编程_第128张图片

5、文件测试

Linux操作系统使用及C高级编程_第129张图片

(四)结构性语句

Linux操作系统使用及C高级编程_第130张图片

六、linux shell脚本编程(分支语句、循环语句)

一、shell分支语句

(一)分支语句(对标if)

Linux操作系统使用及C高级编程_第131张图片

1、echo $?

如果执行成功会返回0

如果执行失败会返回其他

2、分支语句if

Linux操作系统使用及C高级编程_第132张图片

1)test可以用[]代替(注意[]两端要用空格)

Linux操作系统使用及C高级编程_第133张图片

Linux操作系统使用及C高级编程_第134张图片

也可以打印多行

2)elfi

Linux操作系统使用及C高级编程_第135张图片

3)查找命令

Linux操作系统使用及C高级编程_第136张图片

查找用户是否存在

Linux操作系统使用及C高级编程_第137张图片

二、多路分支语句(对标switch case)

1、分号不能丢弃,最后是esac

Linux操作系统使用及C高级编程_第138张图片

Linux操作系统使用及C高级编程_第139张图片

Linux操作系统使用及C高级编程_第140张图片

三、shell循环语句

(一)for循环

1、

Linux操作系统使用及C高级编程_第141张图片

Linux操作系统使用及C高级编程_第142张图片

2、$@和$*的区别

1)$@和$*没有区别

Linux操作系统使用及C高级编程_第143张图片

Linux操作系统使用及C高级编程_第144张图片

2)”$*“将输入的作为一组,而“$@“和原来一样

Linux操作系统使用及C高级编程_第145张图片

Linux操作系统使用及C高级编程_第146张图片

3、for直接赋值

Linux操作系统使用及C高级编程_第147张图片

4、(())

Linux操作系统使用及C高级编程_第148张图片

(二)while循环

Linux操作系统使用及C高级编程_第149张图片

Linux操作系统使用及C高级编程_第150张图片

Linux操作系统使用及C高级编程_第151张图片

(三)循环控制语句(对标break和continue)

Linux操作系统使用及C高级编程_第152张图片

Linux操作系统使用及C高级编程_第153张图片

七、linux shell脚本编程(函数、练习)

一、函数的定义

Linux操作系统使用及C高级编程_第154张图片

Linux操作系统使用及C高级编程_第155张图片

二、函数的调用

Linux操作系统使用及C高级编程_第156张图片

Linux操作系统使用及C高级编程_第157张图片

2、传参

Linux操作系统使用及C高级编程_第158张图片

Linux操作系统使用及C高级编程_第159张图片

三、变量的作用域

1、全局

Linux操作系统使用及C高级编程_第160张图片

2、函数体内部

Linux操作系统使用及C高级编程_第161张图片

当是局部变量时

Linux操作系统使用及C高级编程_第162张图片

八、Linux TFFP服务搭建及使用

(一)TFTP服务器介绍

1、TFTP的介绍

1)什么是服务器

微信、qq、tb客户端

客户端-服务器转发

2)TFTP 简单传输文件 电脑-电脑 电脑-开发板 规定传输规则

Linux操作系统使用及C高级编程_第163张图片

端口号:每个进程和服务器都有唯一

Linux操作系统使用及C高级编程_第164张图片

2、TFTP文件传输的特点

Linux操作系统使用及C高级编程_第165张图片

3、TFTP服务器的实用场景

Linux操作系统使用及C高级编程_第166张图片

用命令可以直接下载所需的文件

(二)TFTP服务器搭建

1、配置介绍

1)网络通常

2)及时更新软件源

sudo apt-get update

3)安装服务器和客户端

tftpd:服务器

tftp:客户端

4)修改配置文件

创建tftpboot目录(作为服务器提供文件的目录)

将他的环境配置到服务器

Linux操作系统使用及C高级编程_第167张图片

Linux操作系统使用及C高级编程_第168张图片

-l:不依赖其他进程,直接启动

Linux操作系统使用及C高级编程_第169张图片

将来开发板下载的文件都在该目录下

5)修改服务器配置后更新

6)测试tftpboot如何使用

Linux操作系统使用及C高级编程_第170张图片

下载文件

上传文件

2、常见错误

Linux操作系统使用及C高级编程_第171张图片

Linux操作系统使用及C高级编程_第172张图片

Linux操作系统使用及C高级编程_第173张图片

Linux操作系统使用及C高级编程_第174张图片

九、Linux NFS服务搭建及使用

(一)NFS服务器介绍

1、

Linux操作系统使用及C高级编程_第175张图片

文件系统放在网络中,可以控制不同电脑的文件系统

开发板的文件系统在网络中,可以在服务器修改

Linux操作系统使用及C高级编程_第176张图片

Linux操作系统使用及C高级编程_第177张图片

Linux操作系统使用及C高级编程_第178张图片

(二)NFS服务器搭建 

1、配置介绍

1)安装软件

Linux操作系统使用及C高级编程_第179张图片

2)创建目录,新建文件测试nfs

Linux操作系统使用及C高级编程_第180张图片

3)配置nfs的路径

Linux操作系统使用及C高级编程_第181张图片

4)重启

5)挂载

本地挂载,挂载到/mnt

板子挂载到根目录/home/linux/nfs/rootfs

6)本地挂载和服务器可以互相共享

Linux操作系统使用及C高级编程_第182张图片

7)取消挂载

需要返回其他目录,关闭/mnt

使用sudo umount /mnt

Linux操作系统使用及C高级编程_第183张图片

2、常见错误

Linux操作系统使用及C高级编程_第184张图片

Linux操作系统使用及C高级编程_第185张图片

十、C结构体、结构体数组以及结构体指针

(一)结构体的意义

1、

Linux操作系统使用及C高级编程_第186张图片

2、结构体定义

注意分号

Linux操作系统使用及C高级编程_第187张图片

(二)结构体的概述

Linux操作系统使用及C高级编程_第188张图片

(三)结构体的定义和使用

Linux操作系统使用及C高级编程_第189张图片

Linux操作系统使用及C高级编程_第190张图片

Linux操作系统使用及C高级编程_第191张图片

(三)结构体数组

Linux操作系统使用及C高级编程_第192张图片

2、打印方式

Linux操作系统使用及C高级编程_第193张图片

Linux操作系统使用及C高级编程_第194张图片

(四)结构体指针

Linux操作系统使用及C高级编程_第195张图片

十一、结构体嵌套、大小及位域

一、结构体嵌套结构体

Linux操作系统使用及C高级编程_第196张图片

Linux操作系统使用及C高级编程_第197张图片

二、结构体的大小

(一)结构体的大小

Linux操作系统使用及C高级编程_第198张图片

Linux操作系统使用及C高级编程_第199张图片

(二)字节对齐

Linux操作系统使用及C高级编程_第200张图片

Linux操作系统使用及C高级编程_第201张图片

自动对齐,简化判断

Linux操作系统使用及C高级编程_第202张图片

(三)结构体大小的计算方法

Linux操作系统使用及C高级编程_第203张图片

自身对齐:数据类型

默认对齐:4

有效对齐:取自身和默认的最小值

地址除以有效必须是整除

最终地址,看最大有效 

Linux操作系统使用及C高级编程_第204张图片

三、位域

(一)位域的定义

Linux操作系统使用及C高级编程_第205张图片

Linux操作系统使用及C高级编程_第206张图片

(二)位于变量的说明

(三)位域的使用

十二、内存管理

内存管理

Linux操作系统使用及C高级编程_第207张图片

“专人转事”

不同数据放在不同的分区 

Linux操作系统使用及C高级编程_第208张图片

Linux操作系统使用及C高级编程_第209张图片

栈区和堆区是代码运行之后才可以,其他之前也可以

Linux操作系统使用及C高级编程_第210张图片

十三、动态分配内存

一、动态内存的使用

Linux操作系统使用及C高级编程_第211张图片

Linux操作系统使用及C高级编程_第212张图片

1、头文件

#include  

Linux操作系统使用及C高级编程_第213张图片

Linux操作系统使用及C高级编程_第214张图片

2、申请的空间不能多次释放

3、申请空间成功返回首地址

二、

Linux操作系统使用及C高级编程_第215张图片

内存泄露:申请了空间但没有来得及释放

十四、GCC编译工具

一、GCC编译工具(一)

(一)GCC简介

Linux操作系统使用及C高级编程_第216张图片

(二)GCC编译过程

Linux操作系统使用及C高级编程_第217张图片

Linux操作系统使用及C高级编程_第218张图片

1、预处理阶段 .i - 将#的头文件展开

头文件和宏定义

gcc -E test.c -o test.i

Linux操作系统使用及C高级编程_第219张图片

2、编译阶段

gcc -S gcc.i -o gcc.s

Linux操作系统使用及C高级编程_第220张图片

修改后编译成功

生成汇编文件

Linux操作系统使用及C高级编程_第221张图片

3、处理生成目标文件

 生成二进制文件

Linux操作系统使用及C高级编程_第222张图片

4、链接C库-生成可执行文件

Linux操作系统使用及C高级编程_第223张图片

5、简化

Linux操作系统使用及C高级编程_第224张图片

Linux操作系统使用及C高级编程_第225张图片

二、GCC编译工具(二)

(三)GCC常用选项

Linux操作系统使用及C高级编程_第226张图片

Linux操作系统使用及C高级编程_第227张图片

1、优化

2、指定头文件的位置

Linux操作系统使用及C高级编程_第228张图片

Linux操作系统使用及C高级编程_第229张图片

3、分文件

Linux操作系统使用及C高级编程_第230张图片

.h:宏定义、结构体共用体、声明函数

.c:函数原型

.c:主函数main

Linux操作系统使用及C高级编程_第231张图片

4、-L:指定链接库

三、条件编译

(一)条件编译的概念

Linux操作系统使用及C高级编程_第232张图片

1、分开编译

Linux操作系统使用及C高级编程_第233张图片

(二)在代码中条件编译

Linux操作系统使用及C高级编程_第234张图片

1、#ifdef

Linux操作系统使用及C高级编程_第235张图片

Linux操作系统使用及C高级编程_第236张图片

2、#ifdef

#else

#endif

Linux操作系统使用及C高级编程_第237张图片

3、#ifndef

Linux操作系统使用及C高级编程_第238张图片

4、#if 1

Linux操作系统使用及C高级编程_第239张图片

Linux操作系统使用及C高级编程_第240张图片

5、#define N 1

Linux操作系统使用及C高级编程_第241张图片

(三)GCC编译时条件编译

Linux操作系统使用及C高级编程_第242张图片

十五、Makefile用法及变量(自定义变量、自动变量、隐含变量)

一、Makefile的重要性

1、编译文件Linux操作系统使用及C高级编程_第243张图片

2、正常编译,文件多的时候操作麻烦

Linux操作系统使用及C高级编程_第244张图片

3、决定能不能完成大型工程  

二、Makefile的概述

Linux操作系统使用及C高级编程_第245张图片

1、自动化编译-makefile

编译效率:make编译过的文件不再编译

Linux操作系统使用及C高级编程_第246张图片正在上传…重新上传取消

三、Makefile的基本语法

1、语法

Linux操作系统使用及C高级编程_第247张图片

Linux操作系统使用及C高级编程_第248张图片

Linux操作系统使用及C高级编程_第249张图片

Linux操作系统使用及C高级编程_第250张图片

2、使用

1)创建一个目录

Linux操作系统使用及C高级编程_第251张图片

2)和函数

Linux操作系统使用及C高级编程_第252张图片

Linux操作系统使用及C高级编程_第253张图片

3)和函数声明

Linux操作系统使用及C高级编程_第254张图片

4)减函数

Linux操作系统使用及C高级编程_第255张图片

Linux操作系统使用及C高级编程_第256张图片

5)减函数声明

Linux操作系统使用及C高级编程_第257张图片

Linux操作系统使用及C高级编程_第258张图片

6)主函数

Linux操作系统使用及C高级编程_第259张图片

Linux操作系统使用及C高级编程_第260张图片

7)普通编译

Linux操作系统使用及C高级编程_第261张图片

8)makefile编译

Linux操作系统使用及C高级编程_第262张图片

Linux操作系统使用及C高级编程_第263张图片

Linux操作系统使用及C高级编程_第264张图片

Linux操作系统使用及C高级编程_第265张图片

9)两步编译

Linux操作系统使用及C高级编程_第266张图片

Linux操作系统使用及C高级编程_第267张图片

此时编译,只会执行第一个目标sub.o

Linux操作系统使用及C高级编程_第268张图片

解决办法:将我们最后需要的test提到最前面,想要实现test需要执行下面的目标

Linux操作系统使用及C高级编程_第269张图片

Linux操作系统使用及C高级编程_第270张图片

10)修改test.c

此时只有两条命令会重新执行

生成test.o和生成test

由于sub.c和add.c没有发生变化

所以sub.o和add.o不需要重新编译生成

Linux操作系统使用及C高级编程_第271张图片

Linux操作系统使用及C高级编程_第272张图片

11)删除除了.c和可执行文件

常规:rm *.o

放到makefile中

Linux操作系统使用及C高级编程_第273张图片

Linux操作系统使用及C高级编程_第274张图片

也可以理解为:不加目标,只访问第二个目标,加了目标,会直接访问此目标

Linux操作系统使用及C高级编程_第275张图片

Linux操作系统使用及C高级编程_第276张图片

Linux操作系统使用及C高级编程_第277张图片

二、Makefile自定义变量

(一)Makefile创建变量的目的

1、

Linux操作系统使用及C高级编程_第278张图片

(二)自定义变量

Linux操作系统使用及C高级编程_第279张图片

Linux操作系统使用及C高级编程_第280张图片

Linux操作系统使用及C高级编程_第281张图片

Linux操作系统使用及C高级编程_第282张图片

(三)变量的赋值

Linux操作系统使用及C高级编程_第283张图片

Linux操作系统使用及C高级编程_第284张图片

1、=

Linux操作系统使用及C高级编程_第285张图片

Linux操作系统使用及C高级编程_第286张图片

2、?=

Linux操作系统使用及C高级编程_第287张图片

3、:=

Linux操作系统使用及C高级编程_第288张图片

Linux操作系统使用及C高级编程_第289张图片

4、+=追加赋值

Linux操作系统使用及C高级编程_第290张图片

Linux操作系统使用及C高级编程_第291张图片

三、Makefile自动变量

Linux操作系统使用及C高级编程_第292张图片

1、$+ $^ $<

Linux操作系统使用及C高级编程_第293张图片

2、@$ 不显示命令

Linux操作系统使用及C高级编程_第294张图片

3、打印

Linux操作系统使用及C高级编程_第295张图片

Linux操作系统使用及C高级编程_第296张图片

Linux操作系统使用及C高级编程_第297张图片

四、Makefile隐含变量

Linux操作系统使用及C高级编程_第298张图片

Linux操作系统使用及C高级编程_第299张图片

1、CC:编译器的名字

Linux操作系统使用及C高级编程_第300张图片

没有的编译器会报错

Linux操作系统使用及C高级编程_第301张图片

2、CFLAGS

Linux操作系统使用及C高级编程_第302张图片

3、头文件在不同目录

要指定头文件的路径 -I(绝对或相对)

Linux操作系统使用及C高级编程_第303张图片

4、$RM == rm -f

Linux操作系统使用及C高级编程_第304张图片

5、% % ==.o .c

Linux操作系统使用及C高级编程_第305张图片

你可能感兴趣的:(linux,运维,服务器)