Ant是一种解释某种XML语言编写的命令的程序。正如justinhj在他的回答中提到的,您可以使用某些XML解析器(例如上面提到的XMLisp),将XML描述转换为某种Lisp数据,然后在Lisp中编写其他代码。您还需要重新实现一些Ant解释。
Lisp中许多原始操作都不需要。Lisp内置了一些文件操作(例如delete-file、rename-file、probe-file等)。有些操作缺失并需要实现-或者您可以使用现有库之一。还要注意,您可以将Lisp文件LOAD到Lisp中并执行代码-它已经带有交互式前端(与Java不同)。
通常情况下,Common Lisp中的高级构建系统实现了一个称为“SYSTEM”的抽象概念。有几个这样的系统。ASDF是一种常见选择,但也有其他选择。系统具有子系统和文件。系统也有一些选项。其组件也具有选项。系统具有组件的结构描述、依赖关系描述或“操作”及其依赖关系的描述。通常以面向对象方式实现这些内容,并且可以将“操作”实现为Lisp(通用)函数。Lisp还提供类似于COMPILE-FILE的函数,该函数将使用Lisp编译器编译文件。如果您的代码有C文件-则需要调用C编译器-usually通过一些允许调用外部程序的实现特定函数(此处为C编译器)。
正如dmitry-vk所提到的,ASDF是一种常见选择。LispWorks提供Common Defsystem。Allegro CL拥有自己的DEFSYSTEM。它的DEFSYSTEM manual还描述了如何扩展它。
所有Lisp解决方案都使用某种Lisp语法(而不是XML语法),通常由宏实现来描述系统。一旦读入Lisp中,它将转换为数据表示形式-通常使用CLOS实例表示系统、模块等。然后,操作也是Lisp函数。某些高阶函数沿着组件图/树行走并在必要时执行操作。其他一些工具沿着组件图/树行走并返回操作表示-然后是建议的计划-然后用户可以让Lisp执行整个计划或计划的一部分。
在Lisp机器上,简单的系统描述如下:
(sct:defsystem scigraph
(:default-pathname "sys:scigraph;"
:required-systems "DWIM")
(:serial "package" "copy" "dump" "duplicate" "random"
"menu-tools" "basic-classes" "draw" "mouse"
"color" "basic-graph" "graph-mixins" "axis"
"moving-object" "symbol" "graph-data" "legend"
"graph-classes" "present" "annotations" "annotated-graph"
"contour" "equation" "popup-accept" "popup-accept-methods"
"duplicate-methods" "frame" "export" "demo-frame"))
以上定义了一个名为SCIGRAPH的系统,所有文件都应按照串行顺序进行编译和加载。
现在我可以看到Lisp机如何更新编译代码:
命令:Compile System (a system [default Scigraph]) Scigraph (keywords) :Simulate (compiling [default Yes]) Yes
构建Scigraph版本Newest的编译操作计划如下: 编译RJNXP:>software>scigraph>scigraph>popup-accept-methods.lisp.newest 加载RJNXP:>software>scigraph>scigraph>popup-accept-methods.ibin.newest
它会编译一个文件并加载它 - 我已经加载了软件并仅更改了这个文件。
有关ASDF,请参见CLIKI页面上提到的文档 - 它的工作方式略有不同。
Common Lisp 的 ASDF (Another System Definition Facility) 与 Make/Ant 类似 (但不完全相同 — 它的目标是构建 Lisp 程序,而不是像 make 或 ant 那样的通用系统)。它可以使用 Lisp 代码进行扩展 (包括系统和组件的子类化,向系统添加操作等)。例如,有一个 asdf-ecs 扩展程序允许将 C 源文件包含在系统中 (并编译)。