简单的 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 中可用)所知。