2017-09-09 130 views
1

試圖最終開始使用asdf作爲我的lisp的塗鴉,我嘗試設置一個簡單的示例。這些文件是我可以(asdf:load-system:foo),但asdf仍然抱怨''foo'沒有指定包'

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

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

(其中「富」其實是「CL-WAV」,但任何我在本地安裝包的問題仍然存在)。

現在,即使運行

(asdf:load-system :foo) 

作品,當我試圖評估

(asdf:make :example) 

我收到此錯誤信息:

The name "FOO" does not designate any package. 

我在做什麼錯?

對於上下文,我的asdf版本是「3.1.5」,軟件包「foo」與quicklisp的(最新版本)一起安裝,所有這些都在SBCL 1.3.20中進行。

+3

系統的名稱不必與系統中任何軟件包的名稱相同。系統'cl-wav'有一個名爲'WAV'的包,所以你需要使用'(:use:wav ...)'來使用它。 – jkiiski

+0

你是對的,解決了它!我仍然不知道爲什麼當我早些時候嘗試使用「zpng」而不是「cl-wav」;它現在也適用於「zpng」。一定錯過了一些東西。 – BlenderBender

+1

請做出回答,@ jkiiski – Svante

回答

1

ASDF系統與軟件包不同。系統只是將一堆文件集中在單個應用程序或庫中的一種方式,可以使用Quicklisp輕鬆進行編譯,加載,測試或安裝。在一個系統中可能有多個包(甚至沒有,儘管這很奇怪)。通常庫有一個與系統名稱相同的「主」包,但這不是強制性的。

在這種情況下,系統cl-wav定義了一個名爲WAV的程序包,因此您需要在程序包定義中使用該程序包。圖書館作者將CL-WAV作爲暱稱命名爲WAV可能會更好,但他們沒有這樣做。

(defpackage :example 
    (:use :cl :asdf :wav)) 
相關問題