一.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,(callmodulesmake,(n))) //执行的第一行代码,进入各个功能目录执行make命令
mc:
@ (foreachn,(foreachn, (foreach n,(foreachn,(Modules),(callmodulesclean,(callmodulesclean, (call modules_clean,(callmodulesclean,(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:=
(Target)@echocleandone!注释:①makefile提供了灵活的变量定义方式=:=(相当于拼接,但前面的变量不能通过后面的变量定义)+=(追加)?=(防止重复定义)②makefile里的函数:wildcard格式:(wildcard∗∗.c)wildcard功能:列出当前目录下的符合模式参数的文件名;patsubst格式(patsubst模式参数,参数1,参数2,…)patsubst功能:把当前目录下的符合模式参数的文件编译成另一种模式参数文件addsuffix格式(addsuffix参数1,参数2)addsuffix:在参数2中的每个单词加上后缀参数1foreach:循环取出参数1中的值,赋给变量,执行表达式;例如a:=xyzresult:=(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
执行的程序代码
3.24课堂总结
最新推荐文章于 2024-06-02 15:52:06 发布