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

小龙女心水论坛 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
  • 7600元一支抗癌药缺货因价廉? 2019-06-15
  • 破财免灾!C罗愿向西班牙税务部门缴纳1880万欧元 2019-06-14
  • 人民网评:还给老百姓清水绿岸、鱼翔浅底的景象 2019-06-14
  • 【学习时刻】华侨大学黄日涵:“一带一路”盛会开启合作发展新篇章 2019-06-13
  • 网络投票刷礼物能不能帮孩子“争上游”? 2019-06-13
  • 西安一男子伙同他人制假 将工业醋酸变身食用醋 2019-06-10
  • 2018中国网络名人环球行-越南站 2019-06-10
  • 《新乌龙院之笑闹江湖》 吴孟达郝劭文时隔24年再聚首 2019-06-06
  • 第529期:辅助降压、缓解便秘……薯类食物好处多多,怎样吃更健康? 2019-06-06
  • 忆王府井时期的文体生活 2019-05-31
  • 老人突然发病如何求助 2019-05-31
  • 视频陶然居变形记:从路边小饭馆到全国餐饮十强 2019-05-28
  • 生发“神药”乱象:广告造假多 一个批号多个名字 2019-05-28
  • 希望揭阳市纪委实事求是认真深入调查群众向中央委巡视组举报“问题氧”背后不作为、乱作为转交案件,尽快给公众病人消费者一个确切的说法? 2019-05-24
  • 内蒙古蒙牛乳业(集团)股份有限公司获第十二届人民企业社会责任奖年度扶贫奖 2019-05-24
  • 31选7复式计算 辽宁11选5走势图表一定牛 7星彩最新开奖结果 中国体育彩票泳坛夺金规律 28张梭哈 安徽十一选五最新开奖结果 皇冠网搜狐彩票 体彩p3技术讲座 五分彩是怎么骗人的 黑龙江11选5代购 曾道人一句中特码 体彩安徽11选5开奖结果查询 山东时时彩销售 46二肖中特 北京11选5过滤