LinuxC编程基础-mak.ppt

上传人:max****ui 文档编号:6375310 上传时间:2020-02-24 格式:PPT 页数:21 大小:335.31KB
返回 下载 相关 举报
LinuxC编程基础-mak.ppt_第1页
第1页 / 共21页
LinuxC编程基础-mak.ppt_第2页
第2页 / 共21页
LinuxC编程基础-mak.ppt_第3页
第3页 / 共21页
点击查看更多>>
资源描述
第二章LinuxC编程基础 make GNUmake管理项目 为什么要使用make 工作量问题 对于拥有多个 上百个 源文件的软件项目 只需编写一次编译过程 而不需要在每次源文件修改后重复输入众多的文件名和编译命令进行编译 效率问题 make能够根据文件的时间戳自动发现更新过的源文件 并通过读入Makefile文件来对更新的源文件进行编译而对其它文件只进行链接操作 2 makefile makefile的格式 目标 欲生成的目标文件 通常是目标文件或可执行文件 依赖项 生成目标需要的文件 多个文件以空格隔开 命令 创建每个目标体时需要运行的命令 可使用续行号 将一个单独的命令行延续成几行 Makefile是make读入的唯一配置文件 其中包含的规则指明 编译哪些文件以及怎样编译这些文件 目标 依赖项列表 Tab缩进 命令 makefile Makefile示例 Makefile里有什么 1 显式规则 显式规则说明了 如何生成一个或多的的目标文件 这是由Makefile的书写者明显指出 要生成的文件 文件的依赖文件 生成的命令 2 隐式规则 由于我们的make有自动推导的功能 所以隐晦的规则可以让我们比较粗糙地简略地书写Makefile 这是由make所支持的 3 变量的定义 在Makefile中我们要定义一系列的变量 变量一般都是字符串 这个有点你C语言中的宏 当Makefile被执行时 其中的变量都会被扩展到相应的引用位置上 4 文件指示 其包括了三个部分 一个是在一个Makefile中引用另一个Makefile 就像C语言中的include一样 另一个是指根据某些情况指定Makefile中的有效部分 就像C中的预编译 if一样 还有就是定义一个多行的命令 5 注释 Makefile中只有行注释 其注释是用 字符 make命令 make工具的使用格式 make 命令选项 命令参数 通常使用make就可以了 make会按序查找名为GNUmakefile Makefile和makefile作为编译指导文件 建议使用Makefile 在make命令后面键入目标名即可建立指定的目标 如果不跟目标名则建立Makefile中定义的第一个目标 make ffile读入当前目录下的file文件作为Makefile Make工作原理 make做的工作 在执行gcc时会先检查依赖文件是否存在 若不存在就先执行别的规则以生成缺少的依赖文件 最后生成相关的目标文件 如果存在 并不急于执行gcc 而是先比较依赖文件与其对应源文件的时间戳 如果源文件较新的话 就会执行相应的规则来重新生成依赖文件和目标文件 否则就不会执行相应的gcc Make工作原理 1 如果工程没有编译过 那么所有C文件都要编译并被链接 2 如果这个工程的某几个C文件被修改 那么只编译被修改的C文件 并链接目标程序 3 如果这个工程的头文件被改变了 那么需要编译引用了这几个头文件的C文件 并链接目标程序 目标的依赖关系 Makefile中的变量 变量的主要作用如下 保存文件名列表 作为依赖文件的一些目标文件名出现在可执行文件的规则中 而在这个规则的命令行里同样包含这些文件并传递给gcc做为命令参数 如果使用一个变量来保存所有的目标文件名 则可以方便地加入新的目标文件而且不易出错 保存可执行命令名 如果项目被用在一个非gcc的系统里 则必须将所有出现编译器名的地方改成用新的编译器名 但是如果使用一个变量来代替编译器名 那么只需要改变该变量的值 保存编译器的参数 在很多源代码编译时 gcc需要很长的参数选项 在很多情况下 所有的编译命令使用一组相同的选项 如果把这组选项使用一个变量代表 那么可以把这个变量放在所有引用编译器的地方 当要改变选项的时候 只需改变一次这个变量的内容即可 变量的定义和使用 Makefile中的变量是用一个文本串在Makefile中定义的 这个文本串就是变量的值 只要在一行的开始写下这个变量的名字 后面跟一个 号 以及要设定这个变量的值即可定义变量 下面是定义变量的语法 VARNAME string使用时 把变量用括号括起来 并在前面加上 符号 就可以引用变量的值 VARNAME 变量一般都在Makefile的头部定义 按照惯例 所有的Makefile变量都应该是大写 如果变量的值发生变化 就只需要在一个地方修改 从而简化了Makefile的维护 变量的其他定义方法 x fooy x bar FOO bar 追加变量值 make命令 Makefile中变量的使用 变量的定义 OBJS val 新Makefile文件内容 OBJS main ohello oCC gcc Wall cmain OBJS gcc OBJS omainmain o main c CC main c omain ohello o hello chello h CC hello c ohello o 变量的使用 OBJS Makefile文件内容 main main ohello ogccmain ohello o omainmain o main cgcc Wall cmain c omain ohello o hello chello hgcc Wall chello c ohello o 14 Makefile中常见自动变量 不包含扩展名的目标文件名称 所有的依赖文件 以空格分开 并以出现的先后为序 可能包含重复的依赖文件 第一个依赖文件的名称 所有时间戳比目标文件晚的依赖文件 并以空格分开 目标文件的完整名称 所有不重复的依赖文件 以空格分开 make命令 Makefile中常见的自动变量 Makefile文件内容 OBJS main ohello oCC gcc Wall cmain OBJS gcc OBJS omainmain o main c CC main c omain ohello o hello chello h CC hello c ohello o 新Makefile文件内容 OBJS main ohello oCC gcc Wall cmain OBJS gcc o main o main c CC o hello o hello chello h CC o 16 Makefile中常见预定义变量 AR归档维护程序的名称 默认值为arAS汇编程序的名称 默认值为asCCC编译器的名称 默认值为ccCPPC预编译器的名称 默认值为 CC ERM文件删除程序的名称 默认值为rm fARFLAGS库文件维护程序的选项 无默认值ASFLAGS传给汇编程序的标志 无默认值CFLAGSC编译器的选项 无默认值CPPFLAGSC预编译的选项 无默认值 Makefile规则 1 隐式规则隐式规则定义了将一个具有某个后缀的文件 例如 c文件 转换为具有另外一种后缀的文件 例如 o文件 的方法 每个后缀规则以两个成对出现的后缀名定义 注意 在隐式规则只能查找到相同文件名的不同后缀名文件 如 file o 文件必须由 file c 文件生成 例 main main ohello ogccmain ohello o omain main main ohello ogccmain ohello o omainmain o main chello hgcc Wall cmain c omain ohello o hello chello hgcc Wall chello c ohello o Makefile规则 2 模式规则模式规则是用来定义相同处理规则的多个文件的 隐式规则仅仅能够用make默认的变量来进行操作 而模式规则还能引入用户自定义变量 为多个文件建立相同的规则 从而简化Makefile的编写 模式规则的格式类似于普通规则 这个规则中的相关文件前必须用 标明 例 o c CC c o 3 伪目标 PHONY clean clean rm f o执行伪目标的两种方法 makevirtual target好处 可以在一个makefile中定义不用的编译或是和编译无关的命令 比如程序的打包 程序的备份 等等 Makefile规则
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!