嵌入式开发工具(下)
3.工程管理器-Make
Make工程管理器也就是个“自动编译管理器”,“自动”指它能够根据文件的时间戳自动发现更新过的文件而减少文件的编译量,同时,它通过读取Makefile文件来执行大量编译 工作。**Makefile是make读入的唯一配置文件!
makefile格式:
target:dependency_files
command/*该行必须以tab键开头*/
例如:
hello: hello.o
gcc -o hello hello.c
hello.o: hello.c
gcc -c hello.c
使用Makefile:
$make
gcc -c hello.c -o hello.o
$ls
hello.c hello.h hello.o makefie
格式:
hello : main.o func1.o fenc2.o //hello是最终目标
gcc main.o func1.o func2.o -o hello
main.o : main.c
gcc -c main.c
func1.o : func1.c
gcc -c func1.c
func2.0 : func2.c
gcc -c func2.c
.PHONY : clean //".PHONY"将"clean"声明为伪目标(没有任何依赖只有执行动作的目标称为伪目标)
clean :
rm -f hello main.o func1.o func2.o
在Makefile中规则的顺序是很重要的!!因为Makefile中只应该有一个最终目标--第一条规则中的目标将被确立为最终的目标!
make命令默认在当前目录下寻找名字为makefile或者Makefile的工程文件,当名字不为这两个之一是可以使用make -f 文件名 指定
hello : main.o func1.o func2.o
gcc main.o func1.o func2.o -o hello
思考1:如果要为hello目标添加一个依赖,如:func3.o,该如何修改?
答案1:
hello : main.o func1.o func2.o func3.o
gcc main.o func1.o func2.o hello.3-o hello
答案2:使用变量
obj=main.o func1.o func2.o func3.o
hello : $(obj)
gcc $(obj) -o hello
在makefile中,存在系统默认的自动化变量
$^:代表所有的依赖文件
$@:代表目标
$<:代表第一个依赖文件
例:
hello : main.o func1.o func2.o
gcc main.o func1.o func2.o -o hello
= 》
hello : main.o func1.o func2.o
gcc $^ -o $@
Makefile中“#”字符后的内容被视作注释。
hello : hello.c
@gcc hello.c -o hello
@:取消回显
client模板的使用
client目录下的文件目录:
/bin:空的
/scripts/makefile(文件):要修改的
/main 其中的目录src中main.c文件中修改代码,(main的文件可修改),在/src下定义头文件#include"../../include/myhead.h"
/add
/sub
/mul
/div 以上5个目录其中都包含一个src目录文件和一个makefile文件,src目录中放相应的.c文件
Makefile(文件):不动
/include/myhead.h:修改
shell
shell是一个命令行解释器,作用是遵循一定的语法将输入的命令加以解释并传给系统,用户可以用shell来启动、挂起、停止甚至是编写一些程序。
shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它互动式的解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高阶语言中才具有的控制结构,包括循环和分支。
种类:Bourne shell(sh) 和Bourne Again shell(bash)这两种常用
[#!]读作“沙棒”
shell第一行编辑:#!/bin/sh
然后编辑文本文件
编辑完后保存,之后执行chmod +x Helloworld 修改权限
最后输入./Helloworld
例:
#!/bin/sh
#对变量赋值:
a="hello world"
#现在打印变量a的内容:
echo "A is:"
echo $a
这个脚本将会输出:
A is:
hello world
例:
s13:
num=2
echo “this is the ${num}nd”
这将打印: “this is the 2nd”
默认变量:
$#:传入脚本的命令行参数个数
$*:所有命令行参数值,在各个参数值间留有空格
$0:命令本身(shell文件名)
$1:第一个命令行参数
$2:第二个命令行参数
If语句:
If [expression]
then
#code block
else if[expression]
then
#code block
else
#code block
fi
fi
-e:文件已存在
-f:文件是普通文件
-s:文件大小不为零
-d:文件是一个目录
-r:文件对当前用户可以读取
-w:文件对当前用户可以写入
-x:文件对当前用户可以执行
例S5:
#!/bin/sh
folder=/home
[ -r "$folder" ] && echo "Can read $folder "
[ -f "$folder" ] || echo "this is not file"
For语句:
for var in [list]
do
#code block
done
for var in [list];do (语句写在同一行)
While语句:
while[condition]
do
#code block
done
Until语句:
until[condition]
do
#code block
done
while 和 until 的区别在于while 为真时执行,until为假时执行;
Case语句:
case "$var" in
condition1)
;;
condition1)
;;
*)
default statements;;
esac
完~