一.工程管理器
1.概念:是指管理较多的文件
Make工程管理器也就是个“自动编译管理器”,这里的“自动”是指它能构根据文件时间戳自动发现更新过的文件而减少编译的工作量,同时,它通过读入Makefile文件文件的内容来执行大量的编译工作
2.makefile是make读入的惟一配置文件,因此本节的内容实际就是讲述makefile的编写规则。在一个makefile中通常包含如下内容:
a.需要由make工具创建的目标体(target),通常是目标文件或可执行文件;
b.要创建的目标体所依赖的文件;
c.创建每个目标体时需要运行的命令(command),这一行必须以制表符(tab键)开头
3.makefile格式
target: dependency_files
< TAB >command /* 该行必须以tab键开头*/
例:hello: hello.o
gcc –o hello hello.o
hello.o:hello.c
gcc –c hello.c
4.Makefile的使用
$ make
gcc –c hello.c –o hello.o
$ ls
hello.c hello.h hello.o makefile
clean :
rm –f hello main.o func1.o func2.o
这两句Shell命令,可以看出clean没有依赖的目标文件,Makefile中把那些没有任何依赖只有执行动作的目标称为“伪目标”;“.PHONY” 将“clean”目标声明为伪目标,如果不申明,当遇到与为目标形同文件名时,将不会运行伪目标,而是运行同名文件。
5.在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 KaTeX parse error: Expected 'EOF', got '#' at position 15: @ Makefile中“#̲”字符后的内容被视作注释,@:…(obj)
gcc KaTeX parse error: Expected 'EOF', got '#' at position 149: …开始(必须放在文件的第一行):#̲!/bin/sh(#!用来告诉…)在变量前面
变量赋值时,“=”两边都不能有空格,BASH中的语句结尾不需要分号
4.默认变量
$#:传入脚本的命令行参数个数
$*:所有命令行参数值,在各个参数值间留有空格
$0:命令本身(shell文件名)
$1:第一个命令行参数
$2:第二个命令行参数
注意:1、在“[”和“]”两边都留有空格
2、在“=”两边也都有空格
5.文件属性的修改
-e 文件已存在
-f 文件是普通文件
-s 文件大小不为零
-d 文件是一个目录
-r 文件对当前用户可以读取
-w 文件对当前用户可以写入
-x 文件对当前用户可以执行
例S5:#!/bin/sh
folder=/home
[ -r “$folder” ] && echo “Can read
f
o
l
d
e
r
“
[
−
f
"
folder“ [ -f "
folder“[−f"folder” ] || echo “this is not file”