SHELL编程(三)网络基础命令 Makefile

news/2024/9/23 6:35:45/

目标

  • 一、网络基础及相关命令
    • (一)网络相关命令
    • (二)重启网络服务
  • 二、Makefile
    • (一)标签式语法
    • (二)目标:依赖 式语法
      • 1. 格式
      • 2. 编译流程:预处理 编译 汇编 链接
      • 3. 目标和伪目标
      • 4. 使用实例
    • (三)makefile中的变量
      • 1. 格式
      • 2. 赋值
        • (1)`=`赋值
        • (2)`:=`立即赋值
        • (3)`+=`追加赋值
        • (4)`?=`询问赋值
      • 3. 使用实例
    • (四)Makefile中的特殊变量
    • (五)Makefile中的通配符
    • (六)Makefile中包含其他.mk文件

一、网络基础及相关命令

(一)网络相关命令

查看网络信息的命令
linux ifconfig
win ipconfig
查看网络是否连通
ping www.baidu.com

(二)重启网络服务

Ubuntu中如果网络服务器异常,可以按下面的流程操作一下:

sudo service network-manager stop  #停止网络服务
sudo vi /etc/NetworkManager/NetworkManager.conf #打开配置文件
managed=true #将managed=false  改成  managed=true  保存退出
sudo root #切换到root用户
sudo rm /var/lib/NetworkManager/NetworkManager.state #删除原来保存的状态信息
exit #回到原用户
sudo service network-manager start  #重新启动网络服务

二、Makefile

Makefile是一个文件,里面存放整个项目的编译规则
Makefile可以根据文件时间戳来决定那些文件需要重新编译,从而提高编译的效率

在这里插入图片描述

makefile文件一般与.c文件一起放在src(源程序)文件夹中

(一)标签式语法

标签1:     指令1  指令2  
标签2:     指令3指令4
  • 注:
  • 标签必须顶满格
  • 指令必须以tab开头(四个空格不可以)
  • 一个makefile文件可以有多个标签
  • 一个标签下可以有多条指令

如果自己写的makefile名字不叫 Makefile 或者 makefile ,可以使用make -f filename 的方式来指定解析的Makefile文件

如果直接make,执行的就是第一个标签下的指令
如果想指定执行哪个标签下的指令 可以使用make 标签名方式

(二)目标:依赖 式语法

1. 格式

目标:依赖  指令  
  • 注:
  • 目标:依赖 必须顶满格
  • 指令必须以tab开头(四个空格不可以)

2. 编译流程:预处理 编译 汇编 链接

a.out:test.ogcc test.o -o a.out
test.o:test.sgcc -c test.s -o test.o
test.s:test.igcc -S test.i -o test.s
test.i:test.cgcc -E test.c -o test.i

make在解析makefile文件时会自动进行推导
所以最终执行顺序:

gcc -E test.c -o test.i #预处理
gcc -S test.i -o test.s #编译
gcc -c test.s -o test.o #汇编
gcc test.o -o a.out #链接

3. 目标和伪目标

makefile中的目标又分为目标和伪目标
目标:编译后会生成目标文件
伪目标:指令会执行,但是没有目标文件产生。如:clean

4. 使用实例

指令前加@,取消指令回显
#Makefile中使用#来注释,只有单行注释

eg: 使用目标:依赖方式,Makefile1

app:main.o hqyj1.o hqyj2.o hqyj3.ogcc main.o hqyj1.o hqyj2.o hqyj3.o -o app
main.o:main.cgcc -I ../include main.c -c -o main.o
hqyj1.o:hqyj1.cgcc -I ../include hqyj1.c -c -o hqyj1.o
hqyj2.o:hqyj2.cgcc -I ../include hqyj2.c -c -o hqyj2.o
hqyj3.o:hqyj3.cgcc -I ../include hqyj3.c -c -o hqyj3.oclean:rm main.o hqyj1.o hqyj2.o hqyj3.o app

-I 指定头文件路径,如果在系统路径中没找到,会到该路径下寻找

makefile_99">(三)makefile中的变量

1. 格式

shell中类似,一般makefile中的变量也大写
定义变量:VALUE=hello
引用变量:$(VALUE) 或者 ${VALUE}

2. 赋值

(1)=赋值

会将所有给变量复制的位置都找到,将最后一次的结果赋值给变量

A=10
B=${A}
A=20
all:@echo ${B}  #B=20
(2):=立即赋值

会将变量当前的值赋值给变量

A=10
B:=${A}
A=20
all:@echo ${B}  #B=10
(3)+=追加赋值
A=hello
B=world
A+=${B}
all:@echo ${A}  #hello world
(4)?=询问赋值

如果变量之前没有被赋值过,本次赋值生效
如果之前已经赋值过了,本次赋值不生效

A=10
A?=20
all:@echo ${A}  #A=10

3. 使用实例

eg:引入变量,Makefile2:

TARGET=app
OBJ=main.o hqyj1.o hqyj2.o hqyj3.o
CC=gcc
INCLUDE=-I ../include 
FLAG=-c -o$(TARGET):$(OBJ)$(CC) $(OBJ) -o $(TARGET)
main.o:main.c$(CC) $(INCLUDE) main.c $(FLAG) main.o
hqyj1.o:hqyj1.c$(CC) $(INCLUDE) hqyj1.c $(FLAG) hqyj1.o
hqyj2.o:hqyj2.c$(CC) $(INCLUDE) hqyj2.c $(FLAG) hqyj2.o
hqyj3.o:hqyj3.c$(CC) $(INCLUDE) hqyj3.c $(FLAG) hqyj3.oclean:rm $(OBJ) $(TARGET)

(四)Makefile中的特殊变量

是针对于每条 目标:依赖 语句
$@ 目标文件
$^ 所有的依赖文件
$< 第一个依赖文件

eg:引入特殊变量

TARGET=app
OBJ=main.o hqyj1.o hqyj2.o hqyj3.o
CC=gcc
INCLUDE=-I ../include 
FLAG=-c -o$(TARGET):$(OBJ)$(CC) $(OBJ) -o $(TARGET)
main.o:main.c$(CC) $(INCLUDE) $< $(FLAG) $@
hqyj1.o:hqyj1.c$(CC) $(INCLUDE) $< $(FLAG) $@
hqyj2.o:hqyj2.c$(CC) $(INCLUDE) $< $(FLAG) $@
hqyj3.o:hqyj3.c$(CC) $(INCLUDE) $< $(FLAG) $@clean:rm $(OBJ) $(TARGET)

(五)Makefile中的通配符

*:在Makefile中执行shell命令时的通配符,通配任意长度的任意字符

LIST=$(shell ls *.c)
all:@echo $(LIST)

%:在Makefile中的通配符,通配任意长度的任意字符

eg:引入通配符

TARGET=app
OBJ=main.o hqyj1.o hqyj2.o hqyj3.o
CC=gcc
INCLUDE=-I ../include 
FLAG=-c -o$(TARGET):$(OBJ)$(CC) $(OBJ) -o $(TARGET)
%.o:%.c$(CC) $(INCLUDE) $< $(FLAG) $@clean:rm $(OBJ) $(TARGET)

(六)Makefile中包含其他.mk文件

-include ../config.mk

  • 注:
  • 通过"-“来包含其他”.mk"文件
  • 包含的文件无需双引号

eg:包含其他.mk文件

-include ../config.mk$(TARGET):$(OBJ)$(CC) $^ -o $@
%.o:%.c$(CC) $(INCLUDE) $< $(FLAG) $@clean:rm $(OBJ) $(TARGET)

http://www.ppmy.cn/news/1464452.html

相关文章

西储大学数据集学习

数据集下载地址&#xff1a;CWRU凯斯西储大学轴承数据数据集——附&#xff1a;下载链接_西储大学轴承数据集下载-CSDN博客 最近研究故障诊断&#xff0c;先对使用比较多的西储大学数据集研究。以资料【1】中的内容展开研究。 1、轴承的结构 轴承分为外圈、内圈、保持架和滚珠…

AlexNet,LeNet-5,ResNet,VGG-19,VGG-16模型

模型 AlexNet导入必要的库&#xff1a;加载类别名称&#xff1a;创建标签映射字典&#xff1a;加载图像数据和对应的标签&#xff1a;构建AlexNet模型&#xff1a;编译模型&#xff1a;训练模型&#xff1a; LeNet-5导入必要的库&#xff1a;加载类别名称&#xff1a;创建标签映…

windows系统电脑外插键盘驱动出现感叹号或者显示未知设备,键盘无法输入的解决办法

笔记本外插的键盘不能用&#xff0c;鼠标可以使用。 查找故障&#xff0c;结果打开设备管理器看到键盘那项里是一个的黄色惊叹号显示未知设备&#xff01;[图片]如下图所示 其实解决办法很简单&#xff0c;不要相信网上的一些博主说删除什么注册表&#xff0c;我开始跟着他们操…

整合SSM框架笔记

整合SSM框架笔记 Spring5 Spring MVC MyBatis Druid MySQL Thymeleaf 感谢尚硅谷课程&#xff1a;B站课程 前言 单Spring框架时&#xff0c;是Java工程。 Spring与Spring MVC可以共用一个配置文件&#xff0c;也可以不共用一个&#xff0c;推荐不共用一个。 Spring与Sp…

11.RedHat认证-Linux文件系统(中)

11.RedHat认证-Linux文件系统(中) Linux的文件系统 格式化分区(1道题) #对于Linux分区来说&#xff0c;只有格式化之后才能使用&#xff0c;不格式化是无法使用的。 #Linux分区格式化之后就会变成文件系统&#xff0c;格式化的过程相当于对分区做了一个文件系统。 #Linux常见…

ROS学习笔记(16):夹缝循迹

0.前言 在笔记的第15期对巡墙驾驶的原理进行了简单讲解&#xff0c;而这期我们来讲一下夹缝循迹&#xff0c;也常被叫follow the gap&#xff0c;也更新一些概念。 1.探索式路径规划与避障 1.概念 无预先建图的路径规划叫探索式路径规划&#xff0c;例如巡墙循迹和夹缝循迹&…

SQL刷题笔记day6-1

1从不订购的客户 分析&#xff1a;从不订购&#xff0c;就是购买订单没有记录&#xff0c;not in 我的代码&#xff1a; select c.name as Customers from Customers c where c.id not in (select o.customerId from Orders o) 2 部门工资最高的员工 分析&#xff1a;每个部…

JAVA类与方法·易错题分析

分析一下作业中关于类与方法写错或者易错的题。 N o . 1 No.1 No.1 下面程序的执行结果是______。 public class Test7 {public static void main(String[] args){new B().display();} } class A{public void draw() {System.out.print("Draw A.");}public void di…