快速业务通道

Linux/Unix环境下的make和makefile详解

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-05-16
出有关文件和检测时间的详细信息.

  Linux下make标志位的常用选项与Unix系统中稍有不同,下面我们只列出了不同部分:

  -c dir

  在读取 makefile 之前改变到指定的目录dir.

  -I dir

  当包含其他 makefile文件时,利用该选项指定搜索目录.

  -h

  help文挡,显示所有的make选项.

  -w

  在处理 makefile 之前和之后,都显示工作目录.

  通过命令行参数中的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 $@ contentlt;

  系统中默认的常用文件扩展名及其含义为:

  .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 $@ contentlt;

  #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

  的数字信息是执行"@size make"命令的输出结果.之只有输出结果而没有相应的命令行,是"@size make"命令以"@"起始,这个符号禁止打印输出它所在的命令行.

  描述文件中的几条命令行在维护编译信息方面非常有用.其中"print"命令行的作用是打印输出在执行过上次"make print"命令后所有改动过的文件名称.系统使用一个名为print的0字节文件来确定执行print命令的具体时间,而宏$?则指向那些在print文件改动过之后进行修改的文件的文件名.如果想要指定执行print命令后,将输出结果送入某个指定的文件,那么就可修改P的宏定义:

  make print "= cat>;zap"

  在Linux中大多数软件提供的是源代码,而不是现成的可执行文件,这就要求用户根据自己系统的实际情况和自身的需要来配置、编译源程序后,软件才能使用.只有掌握了make工具,才能让我们真正享受到到Linux这个自由软件世界的带给我们无

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号