2017-09-09 3 views
1

Versucht, endlich asdf für meine Lisp-Kritzeleien zu starten, habe ich versucht, ein einfaches Beispiel einzurichten. Die Dateien sindIch kann (asdf: load-system: foo), aber asdf beschwert sich immer noch, dass "foo" kein Paket bezeichnet

; contents of example.asd 
(asdf:defsystem "example" 
    :name "example" 
    :depends-on ("foo") 
    :components ((:file "example"))) 

und

; contents of example.lisp 
(defpackage :example 
    (:use :cl :asdf :foo)) 
(in-package :example) 

(wobei "foo" ist eigentlich "cl-wav", aber das Problem weiterhin besteht mit einem der Pakete Ich habe vor Ort installiert ist).

Jetzt, obwohl

läuft
(asdf:load-system :foo) 

funktioniert, wenn ich versuche,

(asdf:make :example) 

ich diese Fehlermeldung zu bewerten:

The name "FOO" does not designate any package. 

Was mache ich falsch?

Für den Kontext ist meine asdf-Version "3.1.5", das Paket "foo" ist mit (der neuesten Version von) quicklisp installiert, und all dies findet in SBCL 1.3.20 statt.

+3

Der Name des Systems ist nicht identisch mit dem Namen eines Pakets im System. Das System 'cl-wav' hat ein Paket namens' WAV', also müssen Sie '(: use: wav ...)' verwenden, um es zu benutzen. – jkiiski

+0

Sie hatten Recht, das hat es gelöst! Ich weiß immer noch nicht, warum es nicht mit "zpng" anstelle von "cl-wav" funktioniert hat, als ich das früher versuchte; es funktioniert jetzt auch mit "zpng". Muss etwas verpasst haben. – BlenderBender

+1

Bitte antworten Sie, @jkiiski – Svante

Antwort

1

ASDF-Systeme sind etwas anderes als Pakete. Ein System ist einfach eine Möglichkeit, mehrere Dateien in einer einzigen Anwendung oder Bibliothek zusammenzufassen, die mit Quicklisp einfach kompiliert, geladen, getestet oder installiert werden kann. Es kann mehrere Pakete in einem einzigen System geben (oder gar keine, obwohl das seltsam wäre). Normalerweise haben Bibliotheken ein "Haupt" -Paket mit dem gleichen Namen wie das System, aber das ist nicht zwingend erforderlich. In diesem Fall definiert das System cl-wav ein Paket mit dem Namen WAV, das Sie in Ihrer Paketdefinition verwenden müssen. Es wäre vielleicht besser für den Bibliotheksautor gewesen, das Paket CL-WAV mit WAV als Spitznamen zu benennen, aber das taten sie nicht.

(defpackage :example 
    (:use :cl :asdf :wav)) 
Verwandte Themen