首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用quicklisp加载外部依赖项?

如何使用quicklisp加载外部依赖项?
EN

Stack Overflow用户
提问于 2013-09-15 10:32:02
回答 2查看 1K关注 0票数 1

这是我的代码:

代码语言:javascript
复制
(defpackage :com.yves.tests (:use :common-lisp))
(in-package :com.yves.tests)
(require :usocket)

每次评估require指令时,都会得到以下错误:

代码语言:javascript
复制
LOAD: A file with name #1=USOCKET does not exist
   [Condition of type SYSTEM::SIMPLE-FILE-ERROR]

当然,我在REPL中安装了带有quickload的包:

代码语言:javascript
复制
CL-USER> (ql:quickload "usocket")
To load "usocket":
  Load 1 ASDF system:
    usocket
; Loading "usocket"

("usocket")
CL-USER> 

实际上,我昨天晚上安装了它,我所有的代码都是毫无怨言地进行评估的。今天我重新启动了Emacs和Slime。我得到了这个错误。还有其他的配置要做吗?

下面是我的加载路径中的内容:

代码语言:javascript
复制
CL-USER> (princ custom:*load-paths*)
(/Users/yves/quicklisp/ /opt/local/lib/clisp-2.49/dynmod/ ./ ~/lisp/**/)
(#P"/Users/yves/quicklisp/" #P"/opt/local/lib/clisp-2.49/dynmod/" #P"./"
 "~/lisp/**/")
CL-USER> 

我是不是应该手工把这条路添加到每一个新包裹上?quicklisp初始化本身不是应该执行的吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-15 10:48:16

Require不是这里所需的操作。

在简单的情况下,您可以将整个系统放在一个自给自足的文件中,您可以将ql:quickload表单包装到一个eval-when中。

代码语言:javascript
复制
(in-package #:cl-user)

(eval-when (:compile-toplevel :load-toplevel :execute)
  (ql:quickload "usocket"))

(defpackage #:com.yves.tests
  (:use #:cl))

(in-package #:com.yves.tests)

;; your code here

如果您想不加限制地使用来自usocket的符号,请在defpackage表单中使用它:

代码语言:javascript
复制
(defpackage #:com.yves.tests
  (:use #:cl #:usocket))

如果您有一个跨多个文件的更大的系统,则可以使用ASDF。运行简单设置的一个快速方法是quickproject,它也可以从Quicklisp中获得。

票数 2
EN

Stack Overflow用户

发布于 2013-09-16 20:31:10

Svante已经回答了您的问题的一个基本解决方案,但是结合asdf (和.asd文件)使用quicklisp可以更容易地扩展项目及其需求可能会更舒服一些。

.asd文件的设置可能如下所示:

代码语言:javascript
复制
;;foobar.asd
(asdf:defsystem :foobar ;this is the name of your project
   :depends-on (:usocket) ;those are the names of the dependencies
   :components ((:file "the-file-name"))) ;this .asd has to be in the same folder (asdf-keyword :module)

定义foobar.asd之后,您可以将项目移动到..quicklisp/本地-项目/ (符号链接将完成)文件夹,或者告诉如何找到您的项目

现在您应该能够通过(ql:quickload :foobar)加载您的项目了。

从现在开始,asdf/quicklisp将在加载项目之前处理(向下)加载所有定义的依赖项。

如果以后希望扩展项目,从而扩展项目.asd文件,则可以在asdf手册堆栈过流中找到有价值的信息。可以访问asdf的项目页这里

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18811335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档