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