简单的 ASDF 系统,具有平面目录结构
考虑这个具有平面目录结构的简单项目:
example
|-- example.asd
|-- functions.lisp
|-- main.lisp
|-- packages.lisp
`-- tools.lisp
example.asd 文件实际上只是另一个 Lisp 文件,只有一个 ASDF 特定的函数调用。假设你的项目依赖于 drakma 和 clsql 系统,其内容可以是这样的:
(asdf:defsystem :example
:description "a simple example project"
:version "1.0"
:author "TheAuthor"
:depends-on (:clsql
:drakma)
:components ((:file "packages")
(:file "tools" :depends-on ("packages"))
(:file "functions" :depends-on ("packages"))
(:file "main" :depends-on ("packages"
"functions"))))
当你加载此 Lisp 文件时,你告诉 ASDF 你的:example 系统,但你还没有加载系统本身。这是通过 (asdf:require-system :example) 或 (ql:quickload :example) 完成的。
当你加载系统时,ASDF 将:
- 加载依赖项 - 在本例中为 ASDF 系统
clsql和drakma - ** 根据给定的依赖项编译和加载系统的组件,即 Lisp 文件
- 首先是
packages(没有依赖) packages之后的functions(因为它只取决于packages),但是在main之前(取决于它)functions之后的main(因为它取决于packages和functions)tools之后的任何时间
- 首先是
记住:
- 根据需要输入依赖项(例如,在使用前需要宏定义)。如果不这样做,ASDF 将在加载系统时出错。
- 列出的所有文件都以
.lisp结尾,但是这个后缀应该在 asdf 脚本中删除 - 如果你的系统名称与其
.asd文件相同,并且你将其文件夹移动(或符号链接)到quicklisp/local-projects/文件夹,则可以使用(ql:quickload "example")加载项目。 - 你的系统所依赖的库必须为 ASDF(通过
ASDF:*CENTRAL-REGISTRY变量)或 Quicklisp(通过QUICKLISP-CLIENT:*LOCAL-PROJECT-DIRECTORIES*变量或其任何 dists 中可用)所知。