common-lisp                
            ASDF - Otra facilidad de definición de sistema
        
        
            
    Buscar..
Observaciones
ASDF - Otra facilidad de definición de sistema
ASDF es una herramienta para especificar cómo los sistemas del software Common Lisp se componen de componentes (subsistemas y archivos), y cómo operar estos componentes en el orden correcto para que puedan compilarse, cargarse, probarse, etc.
Sistema ASDF simple con una estructura de directorio plana.
Considere este proyecto simple con una estructura de directorio plana:
example
|-- example.asd
|-- functions.lisp
|-- main.lisp
|-- packages.lisp
`-- tools.lisp
 El archivo example.asd es en realidad otro archivo Lisp con poco más que una llamada de función específica de ASDF. Asumiendo que su proyecto depende de los sistemas drakma y clsql , su contenido puede ser algo como esto: 
(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"))))
  Cuando carga este archivo Lisp, le dice a ASDF sobre su :example sistema de :example , pero todavía no está cargando el sistema en sí. Esto se hace mediante (asdf:require-system :example) o (ql:quickload :example) . 
Y cuando cargue el sistema, ASDF:
-  Cargue las dependencias, en este caso los sistemas ASDF clsqlydrakma
-  Compile y cargue los componentes de su sistema, es decir, los archivos Lisp, según las dependencias dadas -  packagesprimero (sin dependencias)
-  functionsdespués de lospackages(ya que solo depende de lospackages), pero antes demain(que depende de ellos)
-  functionsmainposteriores (ya que depende depackagesyfunctions)
-  toolscualquier momento después de lospackages
 
-  
Tenga en cuenta:
- Ingrese las dependencias según sean necesarias (por ejemplo, las definiciones de macro son necesarias antes del uso). Si no lo hace, ASDF producirá un error al cargar su sistema.
-  Todos los archivos enumerados terminan en .lisppero este postfix debe eliminarse en el script asdf
-  Si su sistema tiene el mismo nombre que su archivo .asd, y mueve (o enlace simbólico) su carpeta aquicklisp/local-projects/folder, puede cargar el proyecto usando(ql:quickload "example").
-  Las bibliotecas de las que depende su sistema deben ser conocidas por ASDF (a través de ASDF:*CENTRAL-REGISTRYvariable) o Quicklisp (ya sea a través deQUICKLISP-CLIENT:*LOCAL-PROJECT-DIRECTORIES*variable o disponible en cualquiera de sus dists)
Cómo definir una operación de prueba para un sistema
(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)
Notas:
- Estamos asumiendo que el sistema : foo-tests define un paquete llamado "FOO-TESTS"
-  run-testses el punto de entrada para el corredor de prueba
- uoip: symbol-call permite definir un método que llama a una función que aún no se ha leído. El paquete en el que se define la función no existe cuando definimos el sistema
¿En qué paquete debo definir mi sistema ASDF?
 ASDF proporciona el paquete ASDF-USER para que los desarrolladores definan sus paquetes en.