我可以(asdf:load-system:foo),但asdf仍然抱怨''foo“没有指定一个包'

时间:2017-09-09 13:54:45

标签: common-lisp sbcl quicklisp asdf

尝试最终开始使用asdf作为我的lisp涂鸦,我尝试设置一个简单的例子。文件是

; 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)

(其中“foo”实际上是“cl-wav”,但是我在本地安装的任何软件包都存在问题。)

现在,即使正在运行

(asdf:load-system :foo)
当我尝试评估

时,

有效

(asdf:make :example)

我收到此错误消息:

The name "FOO" does not designate any package.

我做错了什么?

对于上下文,我的asdf-version是“3.1.5”,软件包“foo”与(最新版本)quicklisp一起安装,所有这些都发生在SBCL 1.3.20中。

1 个答案:

答案 0 :(得分:1)

ASDF系统与包装不同。系统只是将一堆文件组合在一个应用程序或库中的一种方法,可以使用Quicklisp轻松编译,加载,测试或安装。单个系统中可能有多个软件包(甚至没有,尽管这很奇怪)。通常,库具有与系统同名的“主”包,但这不是强制性的。

在这种情况下,系统cl-wav定义了一个名为WAV的包,因此您需要在包定义中使用它。图书馆作者可能更好地将包CL-WAV命名为WAV作为昵称,但他们没有这样做。

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