common-lisp                
            ASDF - En annan systemdefinitionsfacilitet
        
        
            
    Sök…
Anmärkningar
ASDF - En annan systemdefinitionsfacilitet
ASDF är ett verktyg för att specificera hur system med Common Lisp-programvara består av komponenter (undersystem och filer), och hur man arbetar på dessa komponenter i rätt ordning så att de kan kompileras, laddas, testas, etc.
Enkelt ASDF-system med en platt katalogstruktur
Tänk på detta enkla projekt med en platt katalogstruktur:
example
|-- example.asd
|-- functions.lisp
|-- main.lisp
|-- packages.lisp
`-- tools.lisp
 example.asd fil är egentligen bara en Lisp-fil med lite mer än ett ASDF-specifikt funktionssamtal. Antar att ditt projekt beror på drakma och clsql systemen, kan innehållet vara något liknande: 
(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"))))
  När du laddar denna Lisp-fil berättar du ASDF om ditt :example system, men du laddar inte själva systemet ännu. Det görs antingen av (asdf:require-system :example) eller (ql:quickload :example) . 
Och när du laddar systemet kommer ASDF att:
-  Ladda beroenden - i det här fallet ASDF-systemen clsqlochdrakma
-  Kompilera och ladda komponenterna i ditt system, dvs. Lisp-filer, baserat på de givna beroenden -  packagesförst (inga beroenden)
-  functionsefterpackages(eftersom det bara beror påpackages), men föremain(vilket beror på det)
-  mainafter-functions(eftersom det beror påpackagesochfunctions)
-  toolsnär som helst efterpackages
 
-  
Kom ihåg:
- Ange beroenden som de behövs (t.ex. behövs makrodefinitioner före användning). Om du inte gör det kommer ASDF att göra fel när du laddar ditt system.
-  Alla listade filer slutar på .lispmen detta postfix ska tappas i asdf-skriptet
-  Om ditt system heter samma som .asdfilen och du flyttar (eller symlink) dess mapp tillquicklisp/local-projects/folder kan du sedan ladda projektet med(ql:quickload "example").
-  Bibliotek som ditt system beror på måste vara kända för antingen ASDF (via ASDF:*CENTRAL-REGISTRYvariabel) eller Quicklisp (antingen viaQUICKLISP-CLIENT:*LOCAL-PROJECT-DIRECTORIES*variabel eller tillgänglig i någon av dess dists)
Hur man definierar en testoperation för ett system
(in-package #:asdf-user)
(defsystem #:foo
  :components ((:file "foo"))
  :in-order-to ((asdf:test-op (asdf:load-op :foo)))
  :perform (asdf:test-op (o c)
                    (uiop:symbol-call :foo-tests 'run-tests)))
(defsystem #:foo-tests
  :name "foo-test"
  :components ((:file "tests")))
;; Afterwards to run the tests we type in the REPL
(asdf:test-system :foo)
Anmärkningar:
- Vi antar att systemet : foo-test definierar ett paket som heter "FOO-TESTS"
-  run-testsär startpunkten för testlöparen
- uoip: symbol-samtal gör det möjligt att definiera en metod som kallar en funktion som ännu inte har lästs. Paketet där funktionen definieras finns inte när vi definierar systemet
I vilket paket ska jag definiera mitt ASDF-system?
 ASDF tillhandahåller paketet ASDF-USER för utvecklare att definiera sina paket i.