簡單的 ASDF 系統,具有平面目錄結構

考慮這個具有平面目錄結構的簡單專案:

example
|-- example.asd
|-- functions.lisp
|-- main.lisp
|-- packages.lisp
`-- tools.lisp

example.asd 檔案實際上只是另一個 Lisp 檔案,只有一個 ASDF 特定的函式呼叫。假設你的專案依賴於 drakmaclsql 系統,其內容可以是這樣的:

(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 將:

  1. 載入依賴項 - 在本例中為 ASDF 系統 clsqldrakma
  2. ** 根據給定的依賴項編譯和載入系統的元件,即 Lisp 檔案
    1. 首先是 packages(沒有依賴)
    2. packages 之後的 functions(因為它只取決於 packages),但是在 main 之前(取決於它)
    3. functions 之後的 main(因為它取決於 packagesfunctions
    4. tools 之後的任何時間

記住:

  • 根據需要輸入依賴項(例如,在使用前需要巨集定義)。如果不這樣做,ASDF 將在載入系統時出錯。
  • 列出的所有檔案都以 .lisp 結尾,但是這個字尾應該在 asdf 指令碼中刪除
  • 如果你的系統名稱與其 .asd 檔案相同,並且你將其資料夾移動(或符號連結)到 quicklisp/local-projects/資料夾,則可以使用 (ql:quickload "example") 載入專案。
  • 你的系統所依賴的庫必須為 ASDF(通過 ASDF:*CENTRAL-REGISTRY 變數)或 Quicklisp(通過 QUICKLISP-CLIENT:*LOCAL-PROJECT-DIRECTORIES*變數或其任何 dists 中可用)所知。