3.24课堂总结

一.client的程序
1.查看功能目录,先看scripts的目录下面的makefile
CC := gcc //gcc编译器
CFLAGS := -Wall -O3。
Libs = -lpthread //链接的库
Target := client //生成的目标
Source := $ (wildcard src/.c); //列出当前目录下src目录的所有.c文件 source=src/main.c src/add.c
Objs := (patsubst(patsubst (patsubst %.c,%.o,(patsubst(Source)) //把source变量里的.c文件编译成.o文件 objs:src/main.o src/add.o
Modules += check_putin pack_message main //当前软件代码所有的功能目录
AllObjs := (addsuffix/src/∗.o,(addsuffix/src/∗.o, (addsuffix /src/.o,(addsuffix/src/∗.o,(Modules)) //allobjs=check_putin/src/**.o main/src/.o,列出所有功能目录下的src目录下.o文件
2.总控的makefile
include scripts/Makefile //导入makefile,可以使用makefile定义的变量;
modules_make = $(MAKE) -C (1);//进入(1);//进入 (1); // 进入(1);//进入(1)所对应的目录,执行make命令
modules_clean = $(MAKE) clean -C $(1);//执行maky clean 命令
.PHONY: all mm mc clean
all: $(Target) //找到第一个目标;
mm:
@ (foreachn,(foreachn, (foreach n,(foreachn,(Modules),(callmodulesmake,(callmodulesmake, (call modules_make,(callmodulesm​ake,(n))) //执行的第一行代码,进入各个功能目录执行make命令
mc:
@ (foreachn,(foreachn, (foreach n,(foreachn,(Modules),(callmodulesclean,(callmodulesclean, (call modules_clean,(callmodulesc​lean,(n)))//进入各个功能目录,执行make clean 命令
$(Target) : mm
$(CC) $(CFLAGS) -o $(Target) $(AllObjs) $(Libs)
//gcc -Wall -o3 -o client check_putin/src/.o main/src/.o packmessage/src/
.o -lpthread 把所有.o文件链接成client
@ echo $(Target) make done! //echo打印
clean : mc
rm -rf ( T a r g e t ) @ e c h o c l e a n d o n e ! m a k e f i l e = : = + = ? = ( m a k e f i l e w i l d c a r d : ( w i l d c a r d . c ) w i l d c a r d p a t s u b s t p a t s u b s t 1 2 p a t s u b s t a d d s u f f i x a d d s u f f i x 1 2 a d d s u f f i x 2 1 f o r e a c h : 1 a : = x y z r e s u l t : = (Target) @ echo clean done! 注释: ①makefile提供了灵活的变量定义方式 = := (相当于拼接,但前面的变量不能通过后面的变量定义)+= (追加) ?=(防止重复定义) ②makefile里的函数: wildcard格式:(wildcard **.c) wildcard功能:列出当前目录下的符合模式参数的文件名; patsubst格式(patsubst 模式参数,参数1,参数2,…) patsubst功能:把当前目录下的符合模式参数的文件编译成另一种模式参数文件 addsuffix格式 (addsuffix 参数1,参数2) addsuffix:在参数2中的每个单词加上后缀参数1 foreach:循环取出参数1中的值,赋给变量,执行表达式; 例如 a:=x y z result:= (foreach b, (a),(a), (a),(a),$(b).c)
输出的结果为“x.c y.c z.c”
call:循环赋值
cd 子目录 && $(MAKE)
mkdir -p add/src/
mv add.c add /src
tree
touch add/Makefile
二.改编小型计算器
1.建立功能目录
mkdir -p add/src sub/src div/src mul/src main/src scripts
mv add.c add/src/
mv sub.c add/src/

tree //apt install tree 装入命令,
touch add/Makefile
touch sub/Makefile

touch scripts/Makefile
cp -r …/client/Makefile //直接拷贝
cd scripts/ //进入scripts
cp …/…/client/scripts/Makefile.(拷贝到当前scripts下面)
cp …/client/check_putin/Makefile add/(拷贝5步,add,sub,div,mul,main)

vim scripts//改功能目录
把modules后面的功能目录改成 main add sub div mul
把目标改成cal,链接库改成 -lm
make_clean
make
到此,编译成功
执行./cal
三.脚本——shell编程(脚本:批处理)
1.什么是shell?
①命令解析器:将用户输入的命令解析,调用相应的命令的可执行文件;
②脚本语言;
shell解析器到根目录/bin或/sbin,
常用的shell:sh,bash;
2.变量
变量=值;(等号两边不能有空格),如果是字符串,需要加“”
echo $a (不需要再后面加括号)
3.命令行参数(命令后面跟的参数)
Shell脚本传参,使用以下变量接收传入的参数
echo $0 #脚本名
echo $1 #第一个参数值
echo $2 #第二个参数值
echo $n #第n个参数值
echo $# #参数的个数
echo $$ #进程pid
echo $@ #所有参数
4.函数
定义函数;
函数传参,不需要加括号;
if语句条件判断之数字判断语法
$number1 -eq $nubmer2 #是否相等 equal
$number1 -ne $nubmer2 #是否不相等 not equal
$number1 -gt $nubmer2 #是否大于 greater than
$number1 -ge $nubmer2 #是否大于等于 greater or equal
$number1 -lt $nubmer2 #是否小于 less than
$number1 -le $nubmer2 #是否小于等于 less or equal
if 【 -z $a 】 //判断a是否为空;【前后都要有空格】
“&&”条件成立,执行&&后面的代码;
“||”条件不成立,执行||后面的代码;
for语句的语法:
for 变量名 in 值
do
执行的程序代码

发布了11 篇原创文章 · 获赞 0 · 访问量 216

猜你喜欢

转载自blog.csdn.net/maxiaotiaobutiao/article/details/105218393