有人可以推荐一些关于 SBCL/Common Lisp 包管理的文档吗?

问题描述 投票:0回答:1

提前感谢您的帮助。

由两部分组成的问题:

第 1 部分。

有人可以推荐一些关于 SBCL 包管理的文档吗?我遇到了很多麻烦并遇到了令人惊讶的错误,并且很想知道我正在阅读正确的内容。

第 2 部分。

我希望能够解决我自己的问题,但我知道这个群体更喜欢有可重现的问题,所以我将在下面概述出现的问题:

  1. 我希望构建一个由我的代码以及 :cl :postmodern 和 :frugal-uuid 包组成的包。
  2. 我用
    (cl-project:make-project #P"/home/oliver/quicklisp/local-projects/hsm
    建立一个系统。
  3. 我在上述项目文件夹的 main.lisp 中填充以下内容:
(ql:quickload :frugal-uuid)
(ql:quickload :postmodern)

(defpackage hsm
  (:use :cl :frugal-uuid :postmodern))
(in-package :hsm-new)

下面我定义了我的功能。

当我评估

(ql:quickload :hsm)
时,我收到以下错误:

Package FRUGAL-UUID does not exist.

请注意,如果我在 REPL 中计算 3. 中的上述表达式,它不会出现错误。

common-lisp sbcl
1个回答
0
投票

直接从源文件调用

quickload
不太好:

(ql:quickload :frugal-uuid)
(ql:quickload :postmodern)

这里我假设你的

hsm.lisp
文件正在被编译,并且对
ql:quickload
的相应调用在目标文件中发出,这样当它被加载时,代码就会被执行。但是,在编译文件时,编译器会遇到
defpackage
,它会扩展为
(eval-when (:compile-toplevel ...)...)
,强制在编译期间进行评估。此时,
:frugal-uuid
尚未加载,因为这将在稍后加载编译后的文件时发生。

也可以也可以在

ql:quickload
块内调用
eval-when
以强制在编译时加载依赖项,但最好的方法是将代码组织到systems中。

使用

cl-project:make-project
,您的项目根目录下应该有一个
hsm.asdf
文件,其中包含如下内容:

(defsystem "hsm"                                                                                                                                                                                                                     
  :version "0.1.0"                                                                                                                                                                                                                            
  :author ""                                                                                                                                                                                                                                  
  :license ""                                                                                                                                                                                                                                 
  :depends-on ()                                                                                                                                                                                                                              
  :components ((:module "src"                                                                                                                                                                                                                 
                :components                                                                                                                                                                                                                   
                ((:file "main"))))                                                                                                                                                                                                            
  :description ""                                                                                                                                                                                                                             
  :in-order-to ((test-op (test-op "hsm/tests"))))   

在这里您可以更改项目的依赖项:

:depends (:frugal-uuid :postmodern)

这样当您快速加载

:hsm
时,它也会加载其依赖项。

© www.soinside.com 2019 - 2024. All rights reserved.