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

I can (asdf:load-system :foo), but asdf still complains that '"foo" doesn't designate a package'

为了最终开始将 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 版本是“3.1.5”,软件包 "foo" 安装了(最新版本的)quicklisp,所有这些都发生在 SBCL 1.3.20 中。

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

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

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