通过命令行参数中的target,可指定make要编译的目标,并且允许同时定义编译多个目标,操作时按照从左向右的顺序依次编译target选项中指定的目标文件 。如果命令行中没有指定目标,则系统默认target指向描述文件中第一个目标文件 。
通常 , makefile 中还定义有 clean 目标 , 可用来清除编译过程中的中间文件,例如:
clean:
rm -f *.o
运行 make clean 时,将执行 rm -f *.o 命令,最终删除所有编译过程中产生的所有中间文件 。
隐含规则
在make 工具中包含有一些内置的或隐含的规则,这些规则定义了如何从不同的依赖文件建立特定类型的目标 。Unix系统通常支持一种基于文件扩展名即文件名后缀的隐含规则 。这种后缀规则定义了如何将一个具有特定文件名后缀的文件(例如.c文件),转换成为具有另一种文件名后缀的文件(例如.o文件):
.c:.o
$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $
系统中默认的常用文件扩展名及其含义为:
◆.o 目标文件
◆.c C源文件
◆.f FORTRAN源文件
◆.s 汇编源文件
◆.y Yacc-C源语法
◆.l Lex源语法
在早期的Unix系统系统中还支持Yacc-C源语法和Lex源语法 。在编译过程中,系统会首先在makefile文件中寻找与目标文件相关的.C文件,如果还有与之相依赖的.y和.l文件,则首先将其转换为.c文件后再编译生成相应的.o文件linuxcrm命令;如果没有与目标相关的.c文件而只有相关的.y文件,则系统将直接编译.y文件 。
而GNU make 除了支持后缀规则外还支持另一种类型的隐含规则--模式规则 。这种规则更加通用,因为可以利用模式规则定义更加复杂的依赖性规则 。模式规则看起来非常类似于正则规则,但在目标名称的前面多了一个 % 号,同时可用来定义目标和依赖文件之间的关系,例如下面的模式规则定义了如何将任意一个 file.c 文件转换为 file.o 文件:
%.c:%.o
$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $
#EXAMPLE#
下面将给出一个较为全面的示例来对makefile文件和make命令的执行进行进一步的说明 , 其中make命令不仅涉及到了C源文件还包括了Yacc 语法 。本例选自"Unix Programmer's Manual 7th Edition, Volume 2A" Page 283-284
下面是描述文件的具体内容:
#Description file for the Make command
#Send to print
P=und -3 | opr -r2
#The source files that are needed by object files
FILES= Makefile version.c defs main.c donamc.c misc.c file.c
dosys.c gram.y lex.c gcos.c
#The definitions of object files
OBJECTS= vesion.o main.o donamc.o misc.o file.o dosys.o gram.o
LIBES= -LS
LINT= lnit -p
CFLAGS= -O
make: $(OBJECTS)
cc $(CFLAGS) $(OBJECTS) $(LIBES) -o make
size make
$(OBJECTS): defs
gram.o: lex.c
cleanup:
-rm *.o gram.c
install:
@size make /usr/bin/make
cp make /usr/bin/make ; rm make
#print recently changed files
print: $(FILES)
pr $? | $P
touch print
test:
make -dp | grep -v TIME1zap
/usr/bin/make -dp | grep -v TIME2zap
diff 1zap 2zap
rm 1zap 2zap
lint: dosys.c donamc.c file.c main.c misc.c version.c gram.c
$(LINT) dosys.c donamc.c file.c main.c misc.c version.c
gram.c
rm gram.c
arch:
ar uv /sys/source/s2/make.a $(FILES)
通常在描述文件中应象上面一样定义要求输出将要执行的命令 。在执行了 linux make命令之后,输出结果为:
$ make
cc -c version.c
cc -c main.c
cc -c donamc.c
cc -c misc.c
cc -c file.c
cc -c dosys.c
yacc gram.y
mv y.tab.c gram.c
cc -c gram.c
cc version.o main.o donamc.o misc.o file.o dosys.o gram.o
推荐阅读
- 乐清财务代理记账平台电话,乐清会计
- 新媒体如何改变购物方式,新媒体如何改变购物方式呢
- 天空即时游戏,天空手机游戏
- ios怎么下载赛车类游戏,苹果手机里的赛车游戏
- 包含python错误提示函数的词条
- 借用微信视频号,用微信视频号能赚钱吗
- python函数内调用类的构造函数,python在类中调用函数
- 农业频道直播文案,cctv7农业节目宣传广告
- python并行函数 python 并行