makefile讲解_第1页
makefile讲解_第2页
makefile讲解_第3页
makefile讲解_第4页
makefile讲解_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Makefile讲解 Makefile概述 Makefile编写 Makefile运行 Makefile应用实例课前培训 什么是Unix shell脚本 什么是Makefile 什么是程序的编译链接Makefile概述 Makefile的规则 Makefile的内容 Makefile的文件名 Makefile的工作原理 Makefile的工作方式 Makefile的简单实例Makefile的规则 target . : prerequisites .command target 目标文件 prerequisites 源文件 command源文件生成目标文件的规则,shell命令Makefile内

2、容 Makefile里主要包含了五项内容 显式规则 隐晦规则 变量 引用文件 注释Makefile的文件名 默认的三种文件名 GNUMakefile、Makefile、makefile 执行时直接使用make命令 make make -f Makefile 自定义文件名 可使用自定义文件名,makelib 执行时使用make的“-f”和“-file”参数 make f makelibmake的工作方式 1、读入Makefile。2、读入引用Makefile等文件。3、初始化文件中的变量。4、推导隐晦规则,并分析所有规则。5、为所有的目标文件创建依赖关系链。6、根据依赖关系,决定哪些目标要重新生

3、成。7、执行生成命令。 Makefile的默认工作原理 找到第一个目标文件,并把该文件作为最终文件 根据依赖关系进行工作 如果目标文件的依赖文件不存在或者更新,会重新编译目标文件 如果没有依赖文件,make不会自动执行command命令 在过程中出现错误,make会直接退出并报错简单的Makefile实例 objects = main.o kbd.o command.o display.o insert.o search.o files.o utils.oedit : $(objects)cc -o edit $(objects)main.o : defs.hkbd.o : defs.h co

4、mmand.hcommand.o : defs.h command.hdisplay.o : defs.h buffer.hinsert.o : defs.h buffer.hsearch.o : defs.h buffer.hfiles.o : defs.h buffer.h command.hutils.o : defs.hMakefile的编写 Makefile的书写规则 Makefile的引用文件 Makefile的引用变量 Makefile的条件语法 Makefile的引用函数 Makefile的字符含义Makefile的书写规则 规则语法 target . : prerequisi

5、tes . command targets : prerequisites ; command command targets 文件名,以空格分开 prerequisites目标所依赖的文件,以空格分开多个文件 command 命令行, Tab键开头,用分号做为分隔Makefile的引用文件 include filename文件名称路径 特点 符合shell的任意文件模式 多个文件以空格分开 include不能以Tab键开始 ,可以存在空格Makefile的引用变量变量命名语法 包含字符、数字,下划线(可以是数字开头) 不能使用“:”、“#”、“=”或是空字符(空格、回车等) 大小写敏感定义

6、变量在声明时需要赋初值使用 在变量名前加上“$”符号,建议使用小括号“()”或是大括号“”变量引用变量$(var:a=b)”或是“$var:a=b操作符“=”和”:=”的区别操作符 “?=”Makefile的条件语法条件表达式的语法为:endif以及:elseendif其中表示条件关键字 ,这个关键字有四个ifeq ,ifneq ,ifdef,ifndef 允许多余的空格,else,endif, 不能以Tab键做为开始 Makefile的条件语法 ifeq (, ) 比较两个参数的值是否相同,相同为真 ifneq (, ) 比较两个参数的值是否相同,不同为真 ifdef 变量的值非空,则表达式

7、为真 Ifndef 变量的值为空,则表达式为真Makefile的引用函数 调用语法 $( )$ 函数名 函数的参数 语法要求 参数间以逗号“,”分隔 函数名和参数之间以“空格”分隔 函数调用以“$”开头, 以圆括号或花括号把函数名和参数括起 Makefile的引用函数 调用举例 $(subst , ) 名称:字符串替换函数subst。功能: -被替换前的字符串 - 被替换后的字符串 -被替换的字串 $(subst ee,EE,feet on the street) 原为feet on the street 调用函数后为fEEt on the street Makefile的字符含义命令间的“;

8、” 上条命令结果应用到下条命令命令行前的字符“” 不显示执行命令命令行前的字符“-” 忽略执行该命令的错误命令行前的字符“#” 用于注释,Makefile中只有行注释命令中的波浪号“” “/test”,这就表示当前用户的$HOME目录下的test目录 “hchen/test”则表示用户hchen的宿主目录下的test目录命令中的波浪号“ ” 换行符文件中的通配符“*”,“?”和“.” Makefile 的运行 特点 命令同操作系统Shell的命令行 命令的开头以Tab键开头,或者紧跟在依赖规则后面的分号后 按UNIX的标准Shell解释执行“/bin/sh” make按顺序执行命令 Makef

9、ile 的运行 make命令执行结束的退出码 0 表示成功执行。1 如果make运行时出现任何错误,其返回1。2 使用make的“-q”选项,返回0则说明要更新,返回是2说明有错误发生。 Makefile 的运行 默认执行文件 GNUMakefile、Makefile、Makefile 指定执行文件 make f hchen.mk 默认目标 Makefile中的第一个(组)目标 指定目标 make fxl00101 Makefile 的运行Makefile的运行参数 -f -指定需要执行的Makefile -n-仅输出执行过程中的命令序列,但并不执行 -s-全面禁止命令的显示 -t-更新目标文

10、件的时间 -q-不运行命令,也不输出。仅仅是检查所指定的目标是否需要更新。如果是0则说明要更新,如果是2则说明有错误发生。 -i-在执行时忽略所有的错误 -h-显示帮助信息 -o -指定生成的文件名称 -p-输出Makefile中的所有数据,包括所有的规则和变量。 -qp输出信息而不执行Makefile p f /dev/null查看执行Makefile前的预设变量和规则Makefile 的运行Makefile的运行参数 “debug=”输出make的调试信息。它有几种不同的级别可供选择,如果没有参数,那就是输出最简单的调试信息。下面是的取值:a 也就是all,输出所有的调试信息。(会非常的多

11、)b 也就是basic,只输出简单的调试信息。即输出不需要重编译的目标。v 也就是verbose,在b选项的级别之上。输出的信息包括哪个Makefile被解析,不需要被重编译的依赖文件(或是依赖目标)等。i 也就是implicit,输出所以的隐含规则。j 也就是jobs,输出执行规则中命令的详细信息,如命令的PID、返回码等。m 也就是Makefile,输出make读取Makefile,更新Makefile,执行Makefile的信息。 -d-默认等同于 d=a隐含规则 特点 是Makefile默认运行的规则 可使用系统变量 可自定义隐含规则 显式规则优于隐含规则隐含规则 隐含规则实例 foo

12、 : foo.o cc o foo foo.o 等价于 foo.o : foo.c cc c foo.c 隐含规则一览 编译C程序的隐含规则“.o”的目标的依赖目标会自动推导为“.c”,并且其生成命令是 $(CC) c $(CPPFLAGS) $(CFLAGS) 编译C+程序的隐含规则 编译Pascal程序的隐含规则 编译Fortran/Ratfor程序的隐含规则 预处理Fortran/Ratfor程序的隐含规则 汇编和汇编预处理的隐含规则 链接Object文件的隐含规则“”目标依赖于“.o”,通过运行C的编译器来运行链接程序生成,其生成命令是: $(CC) $(LDFLAGS) .o $(L

13、OADLIBES) $(LDLIBS)自定义隐性规则 规则语法 在目标定义中使用“%” 规则实例 %.o : %.c $(CC) -c $(CFLAGS) $(CPPFLAGS) $ -o $ %.tab.c %.tab.h: %.y bison -d $ 重载内建隐含规则 %.o : %.c$(CC) -c $(CPPFLAGS) $(CFLAGS) -D$(date) 老式风格的后缀规则 双后缀 定义一对后缀:目标文件的后缀和依赖目标的后缀。例如“.c.o”相当于“%o : %c” 单后缀 定义一个后缀,也就是依赖目标的后缀。例如.c相当于% : %.c“ 自定义后缀 伪目标.SUFFIXES: .pco .cob .pc自定义隐性规则自动化变量列表 $表示规则中的目标文件集。 $%仅当目标是函数库文件中,表示规则中的目标成员名。 $依赖目标中的第一个目标名字。 $?所有比目标新的依赖目标的集合,以空格分隔。 $所有的依赖目标的集合

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论