`
oldrev
  • 浏览: 233914 次
  • 性别: Icon_minigender_1
  • 来自: 昆明
社区版块
存档分类
最新评论

用Rant自动化D语言程序构建

阅读更多
上回说到 Rank 这个 Ruby 世界最广泛使用的构建工具在 Windows 下有大bug,根本不能运行。Python的scons太慢、自动得过了头,造成定制起来很麻烦.....
最终,我找到了一个叫 Rant 的Ruby构建工具,用起来几乎与 Rank一样,而且特性更多,最重要的是能在 windows 下面正常运行。因此我强烈推荐各位D语言的粉丝使用Rant作为软件构建工具,放弃那些不成熟的IDE。用Rant的好处是还能顺带学习一下Ruby语言,对于像我一样的Ruby&&D双料菜鸟,这是不可多得的学习机会。

如果没有Ruby,请先下载安装 Ruby。 然后在控制台中输入:gem --remote install rant,系统将会自动安装并配置好 rant
下面是我写的 for DMD 万用 Rantfile 模板,只要把它放到你的D程序所在的目录,稍加修改就能使用。
RANTFILE 代码
  1. # The Rantfile for DMD
  2. # Author: oldrev (wstring<atatat>gmail.com)</atatat>
  3. # No copyrights, use it freely
  4. import "AutoClean"
  5. #require "rant/filelist"
  6. # 请自行定义下面几行
  7. NAME = "foo.exe" # 可执行文件名
  8. SRC = "./src" # D 源程序在 ./src 目录下(包括子目录)
  9. LIBS = ["advapi32.lib", "uuid.lib", "ole32.lib"] # 程序用到的附加 .lib
  10. DEBUG_FLAGS = "-debug -g"
  11. RELEASE_FLAGS ="-release -O"
  12. DC = "dmd.exe"
  13. IMPLIB = "implib.exe"
  14. PROG = "#{NAME}"
  15. PROG_DEBUG = "#{NAME}"
  16. SRCS = Rant::FileList[SRC + "/**/*.d"]
  17. OBJS = SRCS.ext "obj"
  18. OBJS_DEBUG = SRCS.map {|file| file.sub /\.d$/, "_debug.obj"}
  19. DEFS = Rant::FileList[SRC + "/**/*.def"]
  20. ILIBS = DEFS.ext "lib"
  21. task :default => :debug
  22. task :release => :program
  23. task :debug => :program_d
  24. def dolink(target, t)
  25. sys.sh "#{DC} -of#{target} #{t.prerequisites.join(' ')} #{LIBS.join(' ')}"
  26. end
  27. task :program => OBJS.entries + ILIBS.entries do |t|
  28. dolink PROG_DEBUG, t
  29. end
  30. task :program_d => OBJS_DEBUG.entries + ILIBS.entries do |t|
  31. dolink PROG, t
  32. end
  33. gen Rule, ".obj" => ".d" do |t|
  34. sys.sh "#{DC} #{t.source} -c -I#{SRC} #{RELEASE_FLAGS} -of#{t.name}"
  35. end
  36. gen Rule, "_debug.obj" => ".d" do |t|
  37. sys "#{DC} #{t.source} #{DEBUG_FLAGS} -c -I#{SRC} -of#{t.name}"
  38. end
  39. gen Rule, ".lib" => ".def" do |t|
  40. # DigitalMars 的 implib.exe 程序不认识 '/' 分割的路径
  41. lib = t.name.gsub("/", "\\")
  42. dotdef = t.source.gsub("/", "\\")
  43. sys.sh "#{IMPLIB} /system #{lib} #{dotdef}"
  44. end
  45. task :clean do
  46. sys.rm_f OBJS
  47. sys.rm_f OBJS_DEBUG
  48. sys.rm_f ILIBS
  49. sys.rm_f PROG
  50. sys.rm_f PROG_DEBUG
  51. end

此 Rantfile 能扫描源程序目录的所有.d文件,并自动编译连接。如果源程序目录存在 .def 的 DLL 导入库定义文件的话,也会自动生成 .lib,并链接到程序中。

rant 的用法与make基本一致:
rant debug //建立 debug 版程序
rant release // 建立 release 版程序
rant clean // 清理零时文件
rant -f build.rb //指定build.rb为rantfile,而不是当前目录下的 Rantfile

Have Fun!
分享到:
评论
1 楼 qiezi 2007-03-31  
啊哈,这个不错。ruby真是做DSL的好东西亚。。

相关推荐

    rant:Rant-高级过程模板语言

    Rant 4简介Rant 4是用Rust编写的Rant语言的完整重新设计和重新实现。 它的设计考虑到了每个人(程序员,作家和中间的每个人)的可用性! Rant基本上与相反:正则表达式将输入与模式进行比较,Rant从模式生成匹配的...

    rant:一个基于ant的使用框架,主要适用于公司java项目的快速构建部署

    标签"Shell"可能意味着rant框架也包含了一些与Unix/Linux Shell脚本的交互,例如使用shell命令进行系统级别的操作,如启动、停止服务,或者执行系统级别的自动化任务。 在rant-master这个压缩包中,我们可能会找到...

    鸭疫里默氏杆菌MFS外排泵rant基因缺失株的构建及其介导的耐药性.pdf

    鸭疫里默氏杆菌MFS外排泵rant基因缺失株的构建及其介导的耐药性.pdf

    Rant -- A Distributed Build System-开源

    Rant,意为“远程蚂蚁”,是一个创新的开源构建工具,旨在扩展Ant——一个广泛使用的Java构建系统。Rant的目标是解决Ant在处理分布式构建任务时的局限性,使得大型项目或跨平台协作的构建过程变得更加高效和灵活。 ...

    前端项目-rantjs.zip

    【前端项目-rantjs.zip】是一个包含JavaScript编程语言的前端项目,主要功能是实现一种程序化文本生成器,名为Rantjs。这个项目基于Rant库的概念,将文本生成的能力带到了JavaScript环境中,使得开发者可以方便地在...

    rest-o-rant-web:REST-o-RANT演示应用程序的AngularJS前端

    建立 安装Java 8。 ... 通过执行以下命令来docker run -dP --link rest-o-rant-api --name rest-o-rant-web dkr-reg:5000/rest-o-rant-web:v1上一步中构建的Docker映像: docker run -dP --link re

    rant3:(过时)Rant 3.x的存档

    它经过了完善,包括令人眼花array乱的功能,可处理从最基本的字符串生成任务到高级对话生成,代码模板,自动格式化等各种事务。 该项目的目标是使各种开发人员能够以高度的创作自由度自动执行重复的写作任务。 ...

    参考:Rant 4的参考文档

    Rant语言参考 Rant 4语言参考的未来之家。 免责声明:本文档尚在开发中,不具有规范性。建筑构建参考需要mdbook ,该书通过Cargo通过以下方式安装: cargo install mdbook 然后使用以下内容构建书: mdbook build ...

    rant, 面向过程的文本生成引擎鲁棒性.zip

    rant, 面向过程的文本生成引擎鲁棒性 是一个全过程文本引擎,最简单地描述为与相反。 软件经过改进,包括令人眼花缭乱的特性...自动格式化和更多的功能。项目的目标是使开发人员能够以高度的创意自由来自动重复写作任务

    indihmm:Indihome实时Twitter rant仪表板

    4. **Twitter TypeScript**:项目使用TypeScript作为编程语言,这是一种强类型、面向对象的超集,增加了JavaScript的功能,如静态类型检查和类。TypeScript有助于提高代码质量和可维护性,尤其是在大型项目中。 5. ...

    rant:从表达式生成随机文本

    rant从表达式生成随机文本。 $ rant8gYmRa3F$ rant -e'\(/-_-\)/ &lt; [x_]{20}'(/-_-)/ ] &lt;expression-only-if-no-other-expression&gt;generate a random text from the expressionoptions: -c, --count=N ...

    Laravel--Rant-House-Manage

    HRM是使用Laravel 5.3构建的 $ git clone https://github.com/hrshadhin/HRM.git $ cd HRM $ mv .env.example .env 根据需要更改.env中的配置并创建数据库 $ composer install $ php artisan migrate $ ...

    扫帚:开发人员的磁盘清理实用程序

    6. **Gradle**:Gradle是另一种灵活的构建自动化系统,支持多语言项目。它有自己的缓存目录,扫帚可以帮助清理这些缓存以释放空间。 7. **Maven**:Maven是Java项目的构建工具,管理依赖和构建过程。Maven的本地...

    RANT:很棒的新工具

    RANT-很棒的新工具 仅显示命令 收集 需要三个文件。 目标文件,命令文件和输出文件(在运行脚本之前不需要存在)。 目标文件是网络设备的列表。 每行一台设备。 命令文件是要向目标文件中的每个设备发出的SHOW命令...

    devrant-comment-rant-saver:当不小心在文本框区域之外单击时,请保存评论或咆哮

    devrant-comment-ant-saver 当不小心在文本框区域之外单击时,...请确保区分用于编辑帖子的输入和实际的新rant /评论文本框,因为它们具有相同的名称(在rant编辑的情况下:如果rant输入被保存在网页或Feed上的内容?)

    the_hawker_rant

    它包含有关Gitpod和我们使用的扩展的一些重要信息。 Gitpod提醒要在Gitpod中运行前端(仅HTML,CSS,Javascript)应用程序,请在终端中输入: python3 -m http.server应该会出现一个蓝色按钮,以单击: “公开” ,...

    用汇编写的小游戏 下落小球用小板接

    根据给定的信息,本文将详细解释一个使用汇编语言编写的简单游戏——“下落小球用小板接”的核心实现原理与关键技术点。 ### 游戏简介 本游戏使用了汇编语言来开发,其核心玩法是通过控制一个小板(通常在屏幕底部...

    RantDocs:Rant 文档的源代码

    RantDocs 这是位于的 Rant 文档的源代码生成这个网站使用了 Gulp 脚本的一些可怕的嘲弄来生成网站。 首先,您需要下载依赖项: bower installnpm install然后,您需要生成站点: gulpgulp bower每次需要重新生成站点...

    JavaEE培训:Java EE的能力培训资料库

    Java EE的能力 在Java信息库和计算机应用程序库中创建应用程序库。 Objetivo Java实用程序证明和Java EE的证明人资格证明。 没有Java EE的技术服务,也没有... Los proyectos是一种实用的du rant las siguientes lecc

    devRantron:devRant的跨平台桌面应用程序

    目录产品特点使用devRant帐户登录查看Rant并发表评论发布Rants并选择表情符号!获取实时通知制作您的自定义视图!查看个人资料 这是我们为创建跨平台桌面应用程序的。安装可以在最新页面上找到预编译的版本。 此外,...

Global site tag (gtag.js) - Google Analytics