2

为了最终开始使用 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 中。

4

1 回答 1

2

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

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

(defpackage :example
  (:use :cl :asdf :wav))
于 2017-09-10T06:40:50.383 回答