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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
关于Linux/Unix环境下的make和makefile详解的所有评论