更新 2
我认为@faré 是对的,这是一个输出翻译问题。
所以我声明了环境变量ASDF_OUTPUT_TRANSLATIONS
并将其设置为E:/
. 现在(asdf:require-system "my-system")
产生了一个不同的错误:Uneven number of components in source to destination mapping: "E:/"
这使我想到了这个SO-topic。
不幸的是,他的解决方案对我不起作用。所以我尝试了另一个答案并设置ASDF_OUTPUT_TRANSLATIONS
为(:output-translations (t "E:/"))
. 现在我得到另一个错误:
Invalid source registry (:OUTPUT-TRANSLATIONS (T "E:/")).
One and only one of
:INHERIT-CONFIGURATION or
:IGNORE-INHERITED-CONFIGURATION
is required.
(will be skipped)
原始过帐
我有一个简单的系统定义,但无法让 ASDF 加载它。
(asdf-version 3.1.5, sbcl 1.3.12 (升级到 AMD64 1.3.18 ), slime 2.19, Windows 10)
到目前为止我尝试过的
按照 ASDF 手册:“4.1 配置 ASDF 以查找您的系统”
那里说:
对于 Windows 用户,从 ASDF 3.1.5 开始,从您的 %LOCALAPPDATA% 开始,这通常是 ~/AppData/Local/(但您可以在 CMD.EXE 终端 echo %LOCALAPPDATA% 中询问以确保)并在下面创建子路径 config/common-lisp/source-registry.conf.d/
这正是我所做的:
- 回声
%LOCALAPPDATA%
评估为C:\Users\my-username\AppData\Local
- 在下面我创建了子文件夹 config\common-lisp\source-registry.conf.d\ (总共:
C:\Users\my-username\AppData\Local\config\common-lisp\source-registry.conf.d\
手册继续:
在那里创建一个具有您选择的任何名称但类型为 conf 的文件,例如
50-luser-lisp.conf
;在此文件中,添加以下行以告诉 ASDF 递归扫描 /home/luser/lisp/ 下的所有子目录以查找 .asd 文件: (:tree "/home/luser/lisp/") 就足够了。您可以将 /home/luser/lisp/ 替换为要安装源代码的任何位置。
在source-registry.conf.d文件夹中,我创建了文件my.conf并将其放入(:tree "C:/Users/my-username/my-systems/")
。此文件夹包含一个my-system.asd。
奇怪的部分来了:
如果我现在输入(asdf:require-system "my-system")
REPL,我会收到以下错误:
无法创建目录C:\Users\my-username\AppData\Local\common-lisp\sbcl-1.3.12-win-x86\C\Users\my-username\my-systems\C:\
所以问题不在于 ASDF 没有找到该文件,它确实找到了——但是(不管是什么原因)它试图创建一个非常奇怪的子文件夹层次结构,最终失败,因为最后它试图创建文件夹C:
但 Windows 没有' t 允许包含冒号的文件夹名称。
另一种方法:(push path asdf:*central-registry*)
如果我尝试
> (push #P"C:/Users/my-username/my-systems/" asdf:*central-registry*)
(#P"C:/Users/my-username/my-systems/"
#P"C:/Users/my-username/AppData/Roaming/quicklisp/quicklisp/")
> (asdf:require-system "my-system")
我得到完全相同的错误。
我不知道该怎么办。
更新
由于 ASDF 试图创建的奇怪路径的性质,我想也许我可以通过指定相对路径而不是绝对路径来绕过这个问题。所以我尝试
(:tree "\\Users\\my-username\\my-systems")
了我的conf文件。还是同样的错误。