Quicklisp QUICKLOAD应该放在哪里?无处?

Ash*_*she 9 lisp common-lisp allegro-cl quicklisp

假设我在net.aserve和之上构建了一个应用程序bordeaux-threads.我的包声明可能如下所示:

(defpackage :my-package
  (:use :cl :net.aserve :bordeaux-threads)
  (:export …))
Run Code Online (Sandbox Code Playgroud)

我使用Quicklisp,所以(ql:quickload "aserve") (ql:quickload "bordeaux-threads")在编译我的包之前我在SLIME中运行,一切都很好.

当然,明天我再次启动SLIME,我必须记得QUICKLOAD在编译之前发出s,否则我就麻烦了.

可以把类似的东西

(eval-when (:compile-toplevel)
  (ql:quickload "aserve")
  (ql:quickload "bordeaux-threads"))
Run Code Online (Sandbox Code Playgroud)

在我的软件包的顶部 - 这是我为开发所做的 - 但我觉得强制一个包管理器对用户来说不是一个好主意.

还有更好的选择吗?

z_a*_*xis 13

在您的asd文件中,您应该定义依赖实现,如下所示:''

(asdf:defsystem #:aserve
 :serial t
 :depends-on (#:hunchentoot :hunchentoot-cgi
           #::bordeaux-threads
           #:parenscript)
 ...)
Run Code Online (Sandbox Code Playgroud)

之后你只需要(ql:quickload:aserve).

  • 这是问题的正确答案; 接受的答案是对不同问题的答案(我不确定究竟是什么). (3认同)

Mir*_*anu 11

使用quickproject(可通过访问(ql:quickload :quickproject))为您的应用程序创建系统.正如z_axis所描述的那样,您可以在defsystem声明中填写依赖项列表(如果您在调用时错过了任何依赖项quickproject:make-project).

如果您在local-projectsQuicklisp安装的路径中创建新项目,您也可以快速加载项目(即使它不是Quicklisp发行版的一部分).快速加载项目当然会下载依赖项(如果它们是Quicklisp发行版的一部分),然后加载它们.