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