Category Archives: Makefile

毕业设计开发周记(第 3 周)

过去一周工作的完成情况 过去的这一周大部分时间用来找工作了,呵呵。好在工作比想象中的好找, 所以也没有花费我太多的精力。 这些日子在毕业设计项目上取得了以下进展: 为 Makefile::Parser 开辟了 gmake-db分支。 在 GNU make database 的基础上设计出了 GNU make AST 的结构。它由下列几个类组成: Makefile::AST 总的 AST 类,提供节点的添加与查询,比如 add_implicit_rule,apply_implicit_rules,add_explicit_rule,apply_explicit_rules,add_var,add_auto_var,get_var,还有许多其他工具函数,比如计算变量最终值的方法 eval_var_value,有关局部变量作用域 Pad 的 enter_scope 和 leave_scope 方法,等等。 Makefile::AST::Rule::Base 它是 AST 中规则节点的基类,包含 normal_prereqs,order_prereqs,commands,colon 这些属性。 Makefile::AST::Rule 该类表示非隐式规则以及隐式规则“应用”之后的形式,从 Makefile::AST::Rule::Base 继承,并新增了 target … Continue reading

Posted in Makefile | Leave a comment

毕业设计开发周记(第 2 周)

过去一周计划的完成情况 将已有的基于 Test::Base 的 GNU make 测试集加入到了 Makefile::DOM 模块的  SVN 仓库 的 gmake 分支 ,并进行简单的重构: http://svn.openfoundry.org/mdom/branches/gmake/t/ 放弃了整合 Adam Beauchamp 的状态机模式补丁的计划,因为我还是比较喜欢目前的解析策略。 暂时取消了发布 Makefile::DOM 0.01 的计划。因为 Makefile::DOM 的设计还有许多问题,它的设计与实现均需要 未来用 Makefile::Parser 和 GNU make 测试集来进行指引和验证。 在 Makefile::Parser 0.11 的基础上比较完整地实现了下列 GNU make makefile 内建函数: subst, … Continue reading

Posted in Makefile | Leave a comment

毕业设计开发周记(第 1 周)

从现在起,每周三我都将为毕业设计拟定下一周的工作计划,同时对前一周的相关工作进行总结。 过去一周已完成的工作 先后发布了 Makefile::GraphViz 0.11, 0.12 和 0.13 版,主要是旧内核的例行维护,包括 为 gvmake 脚本添加了有用的 -a 选项(从而能绘制 Makefile 中所有的根目标),以及修复了 RT bug #24828 和 #15070 。 开发了针对 Module::Install 的脚本 releng , 用于自动化 CPAN 模块发布前繁杂的准备工作。 我的 Makefile 项目涉及多个 CPAN 模块,每个模块需要发布的版本又是不计其数,因此 releng 脚本无疑会为我节省大量的时间。 基于 Linux::Smaps 开发了一个在 … Continue reading

Posted in Makefile | Leave a comment

Makefile 项目的开发计划

  Makefile::DOM 第一阶段的工作将集中在 Makefile::DOM 的开发上。 该模块以及其他模块都将遵循“早发布,常发布”的原则,并使用先进的基于  Subversion  的  SVK 版本控制系统 进行源代码的管理。 Makefile::DOM 在  CPAN  发布的版本号,采用三段数的格式,比如 0.2.12。以此版本号为基础,可将该模块的开发工作分为下列里程碑: 0.0.x 从 0.0.1 开始,实现  MDOM::Document::Gmake  模块。它将逐步地支持 GNU make 几乎全部的词法和语法结构,完成相应的 POD 格式的英文文档,以及比较全面的基于 Test::Base 模块的  单元测试台 。 0.1.x 从 0.1.0 开始,逐步地在 MDOM (即 Makefile::DOM) 的基础上开发出 GNU … Continue reading

Posted in Makefile | Leave a comment

Makefile 项目的组成

该项目将由下列三部分组成: Makefile::DOM 该模块将 Makefile 视为“文档”进行“无损”的解析,生成类似 DOM 的树形结构。DOM 树中将保留原输入文件中的所有信息,包括空格、空行、注释等。这意味着,从 DOM 树可以还原出原始的 Makefile 文件。另外 DOM 树自身的每个节点甚至整体都是可修改的,就像  PPI  和 HTML::TreeBuilder 那样。 Makefile::DOM 的接口完全模仿了  PPI  的 API 设计。事实上,我直接照搬了 PPI::Node, PPI::Element, PPI::Dumper 的源代码和 POD 文档(此举已得到  PPI  的作者 Adam Kennedy 的完全许可)。 Makefile::DOM 被设计成与具体的 Makefile 语法无关。同一套 DOM … Continue reading

Posted in Makefile | Leave a comment

Makefile 项目的历史与背景

在大三上学期的时候,即 2005 年国庆前后,我正在为我的计算机组成的课程设计项目 Salent 准备 报告 用的素材。那时我就想到从 Salent 项目自身的 Makefile 自动生成项目的 构造流程图 。毕竟 Makefile 文件中已经包含了项目文件间的依赖关系,以及从各组依赖项生成对应目标的 Shell 命令。 在这个应用中,我需要一个 Makefile 解析器以及一个有向图的示意图生成器。至于后者,AT&T 免费的 GraphViz 库可以很好地胜任。至于前者,我进行了大量的网络搜索。我试用了 CPAN 上的 Make 模块,但它不能很好地支持 NMAKE 语法的 Makefile,于是我就针对 Salent 项目的 Makefile 所使用的特性,同时综合了 GNU make 的一些常用特性,自主开发了 Makefile::Parser 模块,并发布到 CPAN。 … Continue reading

Posted in Makefile | Leave a comment