嵌入式课堂笔记5

1、变量
使用方式:$(变量名)
例:变量obj代替“a.o b.o”
嵌入式课堂笔记5
Make工程管理器中变量定义方式
(1)“=”
例:a1的值为a.o

嵌入式课堂笔记5
(2)“:=”
例:a1的值是a.o,a2的值是a.o b.o
嵌入式课堂笔记5
a1的值是b.o,而不是“a.o b.o”:
嵌入式课堂笔记5
即前面的变量不能通过后面的变量来定义。
(3)“+=”
例:a1的值是“a.o b.o”,“+=”可以实现给变量追加值。
嵌入式课堂笔记5
a1的值是“a.o b.o”
嵌入式课堂笔记5
即Makefile的“+=”和C语言中的“+=”相似。
(4)“?=”
例:a1的值是a.o,而不是b.o。嵌入式课堂笔记5
即如果变量a1已经在前面定义过了,那么后面的定义就无效了。
2、函数
(1)wildcard
格式:$(wildcard模式参数)
功能:列出当前目录下所有符合模式参数的文件名
返回值:当前目录下所有符合模式参数的文件名
例如:
result := (wildcard.c)resultC2patsubst(wildcard *.c) result的值为当前目录下所有的C文件名。 (2)patsubst 格式:(patsubset模式参数,参数1,参数2)
功能:把参数2中符合模式参数的单词(单词是指参数中被空格隔开的字符串)替换成参数1
返回值:被替换后的参数2
例如:
result := (patsubstresultx.oy.o3addsuffix(patsubst %.c, %.o, x.c y.c) result的值为“x.o y.o”。 (3)addsuffix 格式:(addsuffix 参数1,参数2)
功能:在参数2中的每个单词加上后缀参数1
返回值:加上后缀的所有单词
例如:
result := $(addsuffix .c, x y)
result的值为“x.c y.c”。

嵌入式课堂笔记5
(4)foreach
格式:$(foreach 变量参数,参数1,表达式)
功能:循环取出参数1中的单词赋给变量参数,然后运行表达式
返回值:表达式的运行结果
例如:
a:= x y z
result := $(foreach b, $(a), (b).c)resultx.cy.cz.cb5call(b).c) result的值为“x.c y.c z.c”。 注意,b在这里是一个临时的变量。 (5)call 格式:(call 变量参数,参数…)
功能:循环把参数依次赋给变量参数中的(1)(1)、(2)…
返回值:赋值后的变量值
例如:
a:= $(2) $(1)
result := $(call $(a), x y)
result的值为“yx”。
嵌入式课堂笔记5
3、Makefile嵌套执行
cd 子目录 && $(MAKE)
或:
$(MAKE) –c子目录
4、Makefile练习
嵌入式课堂笔记5
嵌入式课堂笔记5
嵌入式课堂笔记5
嵌入式课堂笔记5
嵌入式课堂笔记5
嵌入式课堂笔记5
嵌入式课堂笔记5
嵌入式课堂笔记5
嵌入式课堂笔记5
嵌入式课堂笔记5
嵌入式课堂笔记5
加log功能
嵌入式课堂笔记5
嵌入式课堂笔记5
嵌入式课堂笔记5
嵌入式课堂笔记5
嵌入式课堂笔记5
嵌入式课堂笔记5
嵌入式课堂笔记5
嵌入式课堂笔记5
嵌入式课堂笔记5
嵌入式课堂笔记5
嵌入式课堂笔记5
嵌入式课堂笔记5
嵌入式课堂笔记5
嵌入式课堂笔记5
嵌入式课堂笔记5
嵌入式课堂笔记5
嵌入式课堂笔记5
5、shell:(脚本:批处理)
(1)、命令解析器,遵循一定的语法将输入的命令加以解释并传给系统(将用户输入的命令解析,调用相应的命令的可执行文件)
(2)、脚本语言
例:一条命令执行四条语句(简单的shell脚本)
嵌入式课堂笔记5
嵌入式课堂笔记5
嵌入式课堂笔记5
命令:可执行文件
嵌入式课堂笔记5
嵌入式课堂笔记5
嵌入式课堂笔记5
嵌入式课堂笔记5
简单语法:
(1)
嵌入式课堂笔记5
(2)
$#:传入脚本的命令行参数个数
$*:所有命令行参数值,在各个参数值间留有空格
$0:命令本身(shell文件名)
$1:第一个命令行参数
$2:第二个命令行参数
(3)局部变量
在变量首次被复制时加上local关键字可表示一个局部变量, 例S3:
#!/bin/bash
hello=“var1“
echo $hello
function func1 {
local hello=“var2” #local 表示局部变量
echo $hello
}
func1
echo $hello
嵌入式课堂笔记5
$?:获取返回值
(4)if语句
If [expression]
then
#code block
fi
If [expression]
then
#code block
else
#code block
fi
If [expression]
then
#code block
else if [expression]
then
#code block
else
#code block
fi
fi
例:
比较整数a和整数b是否相等:if[ $a = $b ]
比较整数a是否大于整数b:if[ $a –gt $b ]
比较字符串a和b是否相等: if[ $a = $b ]
判断字符串a是否为空:if[ -z $a ]
比较整数变量a是否大于b:if[ $a –gt KaTeX parse error: Expected ‘EOF’, got ‘#’ at position 137: …对当前用户可以执行 例S5: #̲!/bin/sh folde…folder” ] && echo “Can read folder“[−f"
folder“[−f"folder” ] || echo “this is not file”

比较两个参数:
嵌入式课堂笔记5
(4)for语句
for循环与C语言中有所不同,在BASH中for循环的基本结构是:
for var in [list]
do
#code block
done
其中var是循环控制变量, [list]是var需要遍历的一个集合,do/done包含了循环体,相当于c语言中的大括号。另外do和for被写在同一行,必须在do前面加上“;”如: for var in [list];do
S7:
#!/bin/bash
for day in Sun Mon Tue Wed Thu Fri Sat
do
echo $day
done
如果列表被包含在一对双引号中,则被认为是一个元素,如S8

#!/bin/bash
for day in "Sun Mon Tue Wed Thu Fri Sat“
do
echo
daydone上面的例子中,在for所在那行变量day是没有加”
daydone上面的例子中,在for所在那行变量day是没有加””符号的,而在循环体内,echo所在行变量day必须加“KaTeX parse error: Expected ‘EOF’, got ‘#’ at position 51: …condition] do #̲code block Done…var” in
contidion1)
;;
contidion1)
;;
*)
default statements;;
esac
S12:
#!/bin/bash
echo “Hit a key, then hit return.“
read Keypress
case “$Keypress” in
[A-Z] ) echo “Uppercase letter”;;
[a-z] ) echo “Lowercase letter”;;
[0-9] ) echo “Digit”;;
*) echo “Punctuation, whitespace, or other”;;
(5)while
语法:
while [condition]
do
#code block
done
将用户输入的数字按倒序的方式输出:
嵌入式课堂笔记5
输出1~100内的素数
#!/bin/bashsum=0
for (( i=2; i<=100;i++ ));
do
flag=0
for (( j=2;j<=i/2;j++ ));
do
if [ expr $i % $j = 0 ]
then
flag=1
break
fi
done
[ KaTeX parse error: Expected 'EOF', got '&' at position 14: flag -eq 0 ] &̲& sum=((sum+i))
done
echo $sum