欢迎来到至成科技_西安服务器托管_西安服务器租用_西安域名注册
 售前免费咨询专线02989390727
时间:2015-02-20  来源:至成科技  作者:至成科技  点击次数:1824


  通过命令行参数中的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文件;如果没有与目标相关的。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 TIME>1zap /usr/bin/make -dp | grep -v TIME>2zap 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)
  ----------------------------------------------------------
  通常在描述文件中应象上面一样定义要求输出将要执行的命令。在执行了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 \ -LS -o make 13188+3348+3044=19580b=046174b较后的数字信息是执行"@size make"命令的输出结果。之所以只有输出结果而没有相应的命令行,是因为"@size make"命令以"@"起始,这个符号禁止打印输出它所在的命令行。

  描述文件中的较后几条命令行在维护编译信息方面非常有用。其中"print"命令行的作用是打印输出在执行过上次"make print"命令后所有改动过的文件名称。系统使用一个名为print的0字节文件来确定执行print命令的具体时间,而宏$?则指向那些在print文件改动过之后进行修改的文件的文件名。如果想要指定执行print命令后,将输出结果送入某个指定的文件,那么就可修改P的宏定义:make print "P= cat>zap"在Linux中大多数软件提供的是源代码,而不是现成的可执行文件,这就要求用户根据自己系统的实际情况和自身的需要来配置、编译源程序后,软件才能使用。只有掌握了make工具,才能让我们真正享受到到Linux这个自由软件世界的带给我们无穷乐趣。

     以上内容由至成科技(西安服务器托管)为您提供,更多精彩内容:http://www.zcitidc.com/

西安网站建设-至成科技光放微信
陕西本土非营利性IDC互联网接入商/  Shanxi Local nonprofit IDC Internet access provider

公司地址:西安市经开区凤城四路西安国际企业中心B座23层06-10室

7*24小时售前咨询电话:02989390727

7*24小时售后服务电话:02989390727

《中华人民共和国增值电信业务经营许可证》陕B1.B2-20140011  陕ICP备12008874-2  © 2012-2024 ZCITIDC,Inc.

通信地址:西安市经开区凤城四路西安国际企业中心B座23层06-10室  邮政编码:710016

域名合作伙伴:新网互联软件服务有限公司

  • 西安服务器租用
  • 西安域名注册
  • 西安云主机
  • 西安VPS主机
  • 西安网站托管