没有合适的资源?快使用搜索试试~ 我知道了~
首页掌握Makefile编写:自动化编译利器
本文档主要介绍了"跟我一起写Makefile",由作者陈皓在CSDN分享,目的是帮助Windows程序员理解和掌握makefile这一重要的概念。Makefile在Unix/Linux环境下扮演着至关重要的角色,它是一种编译规则文件,用于自动化管理软件项目的构建过程。在Windows环境下,虽然IDE通常会处理这些编译任务,但理解makefile对于成为专业开发者至关重要,因为它能体现编程者的系统级理解能力,特别是在大型项目管理和编译规则的设定上。 makefile的核心在于定义文件间的依赖关系,它指示编译器或构建工具如何根据特定规则编译源代码,包括确定编译顺序、重编译策略等。通过编写makefile,开发者可以实现整个工程的自动化编译,显著提高开发效率。文档特别关注GNU make,因为它是最广泛使用的,并遵循IEEE 1003.2-1992(POSIX.2)标准,适用于Linux环境下的GCC和CC编译器。 文章还将深入讲解程序编译的基本规范和方法,强调源文件首先要被编译为中间代码文件(如在Windows下的.obj文件),并且建议读者查阅相关编译器文档以获取更多关于C/C++编译的知识。本文不仅适合初学者学习Makefile的基础,也对有一定经验的开发者提供实用的参考,帮助他们提升工程管理技能。通过跟随本文的学习,读者将能够理解和创建自己的makefile,从而更好地应对复杂的软件开发项目。
资源详情
资源推荐
、隐晦规则。由于我们的 有自动推导的功能,所以隐晦的规则可以让我们比较粗糙
地简略地书写 ,这是由 所支持的。
、变量的定义。在 中我们要定义一系列的变量,变量一般都是字符串,这个有点
你 ( 语言中的宏,当 被执行时,其中的变量都会被扩展到相应的引用位置上。
、文件指示。其包括了三个部分,一个是在一个 中引用另一个 ,就像 (
语言中的 $!5 一样;另一个是指根据某些情况指定 中的有效部分,就像 ( 语言
中的预编译Q 一样;还有就是定义一个多行的命令。有关这一部分的内容,我会在后续的
部分中讲述。
、注释。 中只有行注释,和 2*= 的 " 脚本一样,其注释是用“QI字符,这个就
像 (>(66中的“>>I一样。如果你要在你的 中使用“QI字符,可以用反斜框进行转义,
如:“HQI。
最后,还值得一提的是,在 中的命令,必须要以K1?L键开始。
二、Makele 的文件名
默 认 的 情 况 下 , 命 令 会 在 当 前 目 录 下 按 顺 序 找 寻 文 件 名 为
“7*2I、“I、“I的文件,找到了解释这个文件。在这三个文件名中 ,
最好使用“I这个
文件名,因为,这个文件名第一个字符为大写,这样有一种显目的感觉。最好不要用
“ 7*2I , 这 个 文件 是 7*2 的 识 别 的 。有 另 外 一 些 只 对 全 小 写 的
“I文件名敏感,但是基本上来说,大多数的 都支持“I和“I这两
种默认文件名。
当 然 , 你 可 以 使 用 别 的 文 件 名 来 书 写 , 比 如 :
“$53I,“%I,“=I等,如果要指定特定的 ,你可以使用
的“: I和“::I参数,如:
: $53 或 ::=。
三、引用其它的 Makele
在 使用 $!5 关键字可以把别的 包含进来,这很像 ( 语言的Q$!5,被
包含的文件会原模原样的放在当前文件的包含位置。$!5 的语法是:
第 页
$!5R$S
$ 可以是当前操作系统 " 的文件模式(可以保含路径和通配符)在 $!5 前面可
以有一些空字符,但是绝不能是K1?L键开始。$!5 和R$S可以用一个或多个空格
隔 开 。 举 个 例 子 , 你 有 这 样 几 个 : 、 ? 、 ! , 还 有 一 个 文 件 叫
,以及一个变量O'?+,其包含了 和 ,那么,下面的语句:
$!5 JO'?+
等价于:
$!5 ?!
命令开始时,会把找寻 $!5 所指出的其它 ,并把其内容安置在当前的位置。
就好像 (>(66的Q$!5 指令一样。如果文件都没有指定绝对路径或是相对路径的话,
会在当前目录下首先寻找,如果当前目录下没有找到,那么, 还会在下面的几个目录
下找:
、如果 执行时,有“:I或“::$!5:I参数,那么 就会在这个参数所指定的目
录下去寻找。
、如果目录R/3S>$!5(一般是:>5%>!>?$ 或>5%>$!5)存在的话, 也会
去找。
如果有文件没有找到的话, 会生成一条警告信息,但不会马上出现致命错误。它会继
续载入其它的文件,一旦完成 的读取, 会再重试这些没有找到,或是不能读
取的文件,如果还是不行, 才会出现一条致命信息。如果你想让 不理那些无法
读取的文件,而继续执行,你可以在 $!5 前加一个减号“:I。如:
:$!5R$S
其表示,无论 $!5 过程中出现什么错误,都不要报错继续执行。和其它版本 兼容
的相关命令是 %$!5,其作用和这一个是一样的。
四、环境变量 MAKEFILES
如果你的当前环境中定义了环境变量 ,那么, 会把这个变量中的值做一个
类似于 $!5 的动作。这个变量中的值是其它的 ,用空格分隔。只是,它和
$!5 不同的是,从这个环境变中引入的 的“目标”不会起作用,如果环境变量中
定义的文件发现错误, 也会不理。
但是在这里我还是建议不要使用这个环境变量,因为只要这个变量一被定义,那么当你使
用 时,所有的 都会受到它的影响,这绝不是你想看到的。在这里提这个事,
只是为了告诉大家,也许有时候你的 出现了怪事,那么你可以看看当前环境中有
第 页
没有定义这个变量。
五、make 的工作方式
7*2 的 工作时的执行步骤入下:(想来其它的 也是类似)
、读入所有的 。
、读入被 $!5 的其它 。
、初始化文件中的变量。
、推导隐晦规则,并分析所有规则。
、为所有的目标文件创建依赖关系链。
、根据依赖关系,决定哪些目标要重新生成。
、执行生成命令。
: 步为第一个阶段,: 为第二个阶段。第一个阶段中,如果定义的变量被使用了,那么,
会把其展开在使用的位置。但 并不会完全马上展开, 使用的是拖延战术,
如果变量出现在依赖关系的规则中,那么仅当这条依赖被决定要使用了,变量才会在其内
部展开。
当然,这个工作方式你不一定要清楚,但是知道这个方式你也会对 更为熟悉。有了
这个基础,后续部分也就容易看懂了。
书写规则
规则包含两个部分,一个是依赖关系,一个是生成目标的方法。
在 中,规则的顺序是很重要的,因为, 中只应该有一个最终目标,其它
的目标都是被这个目标所连带出来的,所以一定要让 知道你的最终目标是什么。一
般来说,定义在 中的目标可能会有很多,但是第一条规则中的目标将被确立为最
终的目标。如果第一条规则中的目标有很多个,那么,第一个目标会成为最终的目标 。
所完成的也就是这个目标。
好了,还是让我们来看一看如何书写规则。
一、规则举例
第 页
剩余63页未读,继续阅读
IT专注搞事情
- 粉丝: 0
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C++标准程序库:权威指南
- Java解惑:奇数判断误区与改进方法
- C++编程必读:20种设计模式详解与实战
- LM3S8962微控制器数据手册
- 51单片机C语言实战教程:从入门到精通
- Spring3.0权威指南:JavaEE6实战
- Win32多线程程序设计详解
- Lucene2.9.1开发全攻略:从环境配置到索引创建
- 内存虚拟硬盘技术:提升电脑速度的秘密武器
- Java操作数据库:保存与显示图片到数据库及页面
- ISO14001:2004环境管理体系要求详解
- ShopExV4.8二次开发详解
- 企业形象与产品推广一站式网站建设技术方案揭秘
- Shopex二次开发:触发器与控制器重定向技术详解
- FPGA开发实战指南:创新设计与进阶技巧
- ShopExV4.8二次开发入门:解决升级问题与功能扩展
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功