快速业务通道

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

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-05-16
简单的宏指代源文件及其相关编译信息,在Linux中也称宏为变量.在引用宏时只需在变量前加$符号,但值得注意的是,如果变量名的长度超过一个字符,在引用时就加圆括号().

  下面都是有效的宏引用:

  $(CFLAGS)

  $2

  $Z

  $(Z)

  其中两个引用是完全一致的.

  需要注意的是一些宏的预定义变量,在Unix系统中,$*、$@、$?和contentlt;四个特殊宏的值在执行命令的过程中会发生相应的变化,而在GNU make中则定义了更多的预定义变量.关于预定义变量的详细内容,

  宏定义的使用可以使我们脱离那些冗长乏味的编译选项,为编写makefile文件带来很大的方便.

  ---------------------------------------------------------

  # Define a macro for the object files

  OBJECTS= filea.o fileb.o filec.o

  # Define a macro for the library file

  LIBES= -LS

  # use macros rewrite makefile

  prog: $(OBJECTS)

  cc $(OBJECTS) $(LIBES) -o prog

  ……

  ---------------------------------------------------------

  此时如果执行不带参数的make命令,将连接三个目标文件和库文件LS;但是如果在make命令后带有新的宏定义:

  make "LIBES= -LL -LS"

  则命令行后面的宏定义将覆盖makefile文件中的宏定义.若LL也是库文件,此时make命令将连接三个目标文件以及两个库文件LS和LL.

  在Unix系统中没有对常量NULL作出明?返亩ㄒ澹虼宋颐且ㄒ錘ULL字符串时要使用下述宏定义:

  STRINGNAME=

  Make命令

  在make命令后不仅可以出现宏定义,还可以跟其他命令行参数,这些参数指定了需要编译的目标文件.其标准形式为:

  target1 [target2 …]:[:][dependent1 …][;commands][#…]

  [(tab) commands][#…]

  方括号中间的部分表示可选项.Targets和dependents当中可以包含字符、数字、句点和"/"符号.除了引用,commands中不能含有"#",也不允许换行.

  在通常的情况下命令行参数中只含有一个":",此时command序列通常和makefile文件中某些定义文件间依赖关系的描述行有关.如果与目标相关连的那些描述行指定了相关的command序列,那么就执行这些相关的command命令,即使在分号和(tab)后面的aommand字段甚至有可能是NULL.如果那些与目标相关连的行没有指定command,那么将调用系统默认的目标文件生成规则.

  如果命令行参数中含有两个冒号"::",则此时的command序列也许会和makefile中所有描述文件依赖关系的行有关.此时将执行那些与目标相关连的描述行所指向的相关命令.同时还将执行build-in规则.

  如果在执行command命令时返回了一个非"0"的出错信号,例如makefile文件中出现了错误的目标文件名或者出现了以连字符打头的命令字符串,make操作一般会就此终止,但如果make后带有"-i"参数,则make将忽略此类出错信号.

  Make命本身可带有四种参数:标志、宏定义、描述文件名和目标文件名.其标准形式为:

  Make [flags] [macro definitions] [targets]

  Unix系统下标志位flags选项及其含义为:

  -f file

  指定file文件为描述文件,如果file参数为"-"符,那么描述文件指向标准输入.如果没有"-f"参数,则系统将默认当前目录下名为makefile或者名为Makefile的文件为描述文件.在Linux中, GNU make 工具在当前工作目录中按照GNUmakefile、makefile、Makefile的顺序搜索 makefile文件.

  -i

  忽略命令执行返回的出错信息.

  -s

  沉默模式,在执行之前不输出相应的命令行信息.

  -r

  禁止使用build-in规则.

  -n

  非执行模式,输出所有执行命令,但并不执行.

  -t

  更新目标文件.

  -q

  make操作将根据目标文件是否已经更新返回"0"或非"0"的状态信息.

  -p

  输出所有宏定义和目标文件描述.

  -d

  Debug模式,输

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号