2017-09-09 67 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)) 
相关问题