欢迎来到至成科技_西安服务器托管_西安服务器租用_西安域名注册
029-89393039
时间:2015-02-20  来源:至成科技  作者:SEOR  点击次数:967

小龙女心水论坛 www.md0lu.cn
  通过命令行参数中的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 [email protected] $<系统中默认的常用文件扩展名及其含义为:。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 [email protected] $< #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这个自由软件世界的带给我们无穷乐趣。

     以上内容由至成科技(西安服务器托管)为您提供,更多精彩内容:小龙女心水论坛

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

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

全国咨询热线(TEL): 029-89390727

7*24小时售前咨询电话 :
029-89390727   029-63390892   029-63390961
029-68090209

7*24小时售后服务电话 : 029-89393039

Top
  • 图解 前5月空气质量优良132天 重庆空气优良“style”是这样炼成的 2019-04-21
  • 三大运营商集体发声:已全面规范不限量套餐宣传 2019-04-20
  • 今年全军院校将招生三万余名 2019-04-14
  • 人大代表网络平台-天山网 2019-04-12
  • 学习贯彻落实习近平总书记重要讲话精神 2019-04-11
  • 香港多地举办龙舟赛共庆端午节 2019-04-09
  • 国外看中国科技:中国隧道技术发展迅速享誉世界 2019-04-08
  • 永济市区至大西高铁站引道工程加速推进 2019-04-04
  • 四川大熊猫宝宝诞生 熊猫基地人气旺 2019-03-27
  • 清淡又滋补的羊肉萝卜汤 消灭羊肉就靠它-美食资讯 2019-03-25
  • 人民日报评论员随笔:让文化热情涵养更多经典 2019-03-25
  • 一语惊坛(5月17日):深化“放管服”,把便民利企做实做好。 2019-03-21
  • 魏尧直面问题 立行立改 打造本质环保型企业 2019-03-21
  • 方法-热门标签-华商生活 2019-03-18
  • 学会了脆皮炸香蕉 再也不会把香蕉放到烂啦-美食资讯 2019-03-13
  • 922| 69| 316| 324| 605| 674| 277| 567| 366| 712|