问题描述
我是 Common Lisp 的新手,我在 Windows 10 上使用 Emacs/SLIME,我正在尝试了解 CL 和 ASDF/打包的工作原理。
我在目录“D:\DropBox\my-packages”中有一个自定义包“my-pack”。
%LOCALAPPDATA%\config\common-lisp\source-registry.conf.d\
并添加了这一行:
(:tree "D:\\DropBox\\my-packages\\")
我打开了 Emacs,启动了 SLIME 并通过 REPL 创建了项目:
(cl-project:make-project #p"D:/DropBox/my-packages/my-pack)
我验证了项目在目录中,然后用asdf(版本3.3.1)加载系统:
(asdf:load-system :my-pack)
而且效果很好。
但是当我退出并重新启动 Emacs 时,在尝试加载系统时出现以下错误:
Component :MY-PACK not found
[Condition of type ASDF/FIND-COMPONENT:MISSING-COMPONENT]
据我所知,我已按照 manual 中的步骤操作。任何帮助表示赞赏。
解决方法
- cl-project 的
make-project
以这一行结尾:
(push dir asdf:*central-registry*)
它将新项目的目录添加到此列表中,该列表告诉 ASDF 在哪里查找项目。重新启动 CL 时它的值是多少?
2.
\config\common-lisp\
不应该是.config
吗?
- 但是,我不鼓励将此 conf 文件与
:tree
一起使用。文档说:
告诉 ASDF 递归扫描所有子目录
因此,想象一下,如果您尝试自己进行 Web 开发并安装,例如,使用 npm 或等效工具安装 JavaScript 依赖项,您最终会得到一个巨大的 node_modules/
,您的 Lisp 现在将需要一个几秒钟即可启动。
我建议将您的项目放在 ~/common-lisp/
或 ~/quicklisp/local-projects
下,或者创建符号链接,或者将您的项目添加到您的 Lisp 启动文件中的 asdf:*central-registry*
中:
;; .sbclrc
(pushnew "/home/me/projects/ciel/" asdf:*central-registry* :test #'equal)