总结5

一、根据demo编写Makefile
1、vim scripts/Makefile
在这里插入图片描述
(1)通过“=”定义变量:前面的变量可以通过后面的变量来定义。
例:
a1=$(a2)
a2=$(a3)
a3=a.o
因此a1的值时是a.o
(2)通过“:=”定义变量:前面的变量不能通过后面的变量来定义。
例:
a1:= a.o
a2:= $(a1) b.o
因此a1的值是a.o,a2的值是a.o b.o
例:
a1:= $(a2) b.o
a2:= a.o
因此a1的值是b.o,不是a.o b.o
(3)通过“+=”定义变量:给变量追加值。
例:
a1= a.o
a1+= b.o
因此a1的值是a.o b.o
等同于:
a1= a.o
a1:= $(a1) b.o
(4)通过“?=”定义变量:如果变量已经在前面定义过,那么后面的定义就无效。(作重复定义判断)
例:
a1:= a.o
a1?= b.o
因此a1的值是a.o,不是b.o
1)CC代表gcc编译器
2)CFLAGS 为编译选项-Wall -O3
3)Libs为想要链接的库
4)Target为生成的目标,即最终生成的可执行文件
5)函数wildcard:$(wildcard 模式参数)
列出当前目录下所有符合模式参数的的文件名,即Source为列出当前目录下src目录的所有.c文件
6)函数patsubst:$(patsubst 模式参数,参数1,参数2,…)
把参数2中符合模式参数的单词(指参数中被空格隔开的字符串)编译成参数1,即Objs为将Source变量里的.c文件编译成.o文件
7)Modules为当前软件代码所有的功能目录
8)函数addsuffix:$(addsuffix 参数1,参数2)
在参数2中的每个单词加上后缀参数1,即AllObjs为列出所有功能目录下的src目录下的.o文件
2、vim Makefile
在这里插入图片描述
1)include scripts/Makefile:导入Makefile,可以使用该Makefile定义的变量
2)函数foreach:$(foreach 变量参数,参数1,表达式)
循环取出参数1中的单词赋给变量参数,然后运行表达式
3)函数call:$(call 变量参数,参数…)
循环把参数依次赋给变量参数中的$(1),$(2)…
4)modules_make =\ $(MAKE) -C $(1);(modules_make = cd $(1) && $(MAKE);)为进入$(1)所对应的目录,执行make命令
5)@ $(foreach n,$(Modules),$(call modules_make,$(n)))为进入各个功能目录执行make命令
6)@ $(foreach n,$(Modules),$(call modules_clean,$(n)))为进入各个功能目录执行make clean命令
7)$(CC) $(CFLAGS) -o $(Target) $(AllObjs) $(Libs)为gcc -Wall -O3 -o cal main/src/*.o add/src/*.o sub/src/*.o mul/src/*.o div/src/*.o log/src/*.o -lm,即把所有的.o文件链接生成可执行文件cal
3、cd add
vim Makefile
在这里插入图片描述
1)include …/scripts/Makefile:导入Makefile,可使用该Makefile定义的变量
2)all :\ $(Objs)为取$(Objs),Objs调用函数patsubst(将.c编译生成.o),即gcc -c src/add.c -o src/add.o
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、嵌入式Linux开发工具-shell编程(脚本:批处理)(嵌入式系统开发——系统移植)
1、shell解释
(1)命令解析器:将用户输入的命令解析,调用相应命令的可执行文件
(2)脚本语言
2、shell常用种类:sh和bash
3、shell程序基础
(1)#!/bin/sh:必须在文件第一行
(2)#!:告诉系统后面的参数是用来执行该文件的程序。
(3)chmod +x filename:使脚本可执行
(4)./filename:执行脚本
4、shell语法(SH中的语句结尾不需要分号;当写在同一行时需要加分号)
(1)变量
1)为变量赋值(“=”两边均不能有空格)
格式:
变量名=值
2)取出变量值
格式:
$变量名
例:
a=“hello world”
echo $a
例:
a=2
echo “this is $and”
输出显示:
this is
例(修改):
a=2
echo “this is {$a}nd”
输出显示:
this is {2}nd
3)默认变量:
$#:传入脚本的命令行参数个数
$*:所有命令行参数值,在各个参数值间留有空格
$0:命令本身(shell文件名)
$1:第一个命令行参数
$2:第二个命令行参数
例:
echo $*
echo $0
echo $1
echo $2
./hello 1 2 3(./filename后即为命令行参数)
输出显示:
1 2 3
./hello
1
2
4)定义局部变量
格式:
在变量名前加local
例:
function func1
{
local a=3
echo “local a = $a”
}
func1
echo “golb a = $a”
输出显示:
local a = 3
golb a = 2
(2)函数
1)定义函数
格式:
function 函数名
{

}
2)调用函数
格式:
函数名
3)函数传参
格式:
function 函数名
{

}
函数名 参数名1,参数名2
例:
function func1
{
local a=3
echo $1($1表示第一个形参)
echo $2($2表示第二个形参)
echo “local a = $a”
}
func1 1,2
输出显示:1,2
local a = 3
golb a = 2
例:
function func1
{
local a=3
echo $1
echo $2
echo “local a = $a”
}
func1 1 2
输出显示:
1
2
local a = 3
golb a = 2
4)获取函数返回值
格式:
function 函数名
{

return 返回值
}
echo $?
例:
function func1
{
local a=3
echo $1
echo $2
echo “local a = $a”
return 5
}
func1 1 2
echo “func1 return $?”
输出显示:
1
2
local a = 3
func1 return 5
golb a = 2
(3)if语句
1)格式:
If [expression]
then
#code block
else if [expression]
then
#code block
else
#code block
fi
fi
2)条件:(在“[”和“]”两边均留有空格;在“=”两边也均留有空格)
相同:-eq(整数操作);=(字符串操作)
不同:-ne(整数操作);!=(字符串操作)
大于:-gt(整数操作);>(字符串操作)
小于:-lt(整数操作);<(字符串操作)
大于或等于:-ge(整数操作)
小于或等于:-le(整数操作)
为空:-z(整数操作)
不为空:-n(整数操作)
例:
if [ $a = $b ]:比较整数a和整数b是否相等
if [ $a -gt $b ] :比较整数a是否大于整数b
if [ $a = $b ]:比较字符串a和b是否相等
if [ -z $a ]:判断字符串a是否为空
if [ $a -gt $b ]:比较整数变量a是否大于b
例:s4.sh
在这里插入图片描述

输出显示:
在这里插入图片描述
3)
-e:文件已存在
-f:文件是普通文件
-s:文件大小不为零
-d:文件是一个目录
-r:文件对当前用户可以读取
-w:文件对当前用户可以写入
-x:文件对当前用户可以执行
例:s5.sh
在这里插入图片描述
&&:判断条件是否成立,成立就执行后面语句,不成立则不执行
||:判断条件是否成立,不成立就执行后面语句,成立则不执行
输出显示:
在这里插入图片描述
例:
在这里插入图片描述
输出显示:
在这里插入图片描述
(4)for语句
格式:(var是循环控制变量;[list]是var需遍历的集合)
for var in [list]
do
#code block
done
或:(for和do若写在同一行,必须在do前加“;”)
for var in [list];do
#code block
done
例:s9.sh
在这里插入图片描述
或:
在这里插入图片描述
或:
在这里插入图片描述
输出显示:
在这里插入图片描述
(5)while语句(while为真时执行)
格式:
while [condition]
do
#code block
done
例:s10.sh
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200330211813382.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0ZlYXRoZXJNYQ==,size_16,color_FFFFFF,t_70
read:键盘输入,读取一个变量值
输出显示:
在这里插入图片描述
(6)until语句(until为假时执行)
格式:
until [condition]
do
#code block
done
(7)case语句
格式:
case “$var” in
condition1)
;;
condition1)
;;
*)
default statements;;
esac
例:s12.sh
在这里插入图片描述
输出显示:
在这里插入图片描述
5、实际操作:shell编程输出1-100内的素数
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值