(ASDF 3) 是否可以在子目录中递归加载系统?
(ASDF 3) Is it possible to recursively load systems in subdirectories?
我知道使用 :module
s,但是当系统嵌套时怎么办?假设我有以下结构,相对于一些未知的用户目录:
foo/
-foo.asd
-bar/
--bar.asd
这可能会出现,例如,当使用 Git 子模块时。我应该如何配置 foo.asd
中的 (defsystem)
调用以将 bar
作为依赖项加载,而不修改 foo/
之外的配置文件或要求 foo/
的特定位置] 树本身?感觉应该很简单。
2020 年 2 月 3 日: 来自@Svante 的 , it sounds like my question is really 'How do I dynamically ensure that foo/
and bar/
both get into the *source-registry*
?' The ASDF manual 让我认为这应该可以解决问题:
(asdf:initialize-source-registry
'(:source-registry
(:tree "«absolute-path-to-foo»/")
:inherit-configuration))
虽然我还没有看到这种用法的例子。
2020 年 3 月 26 日: 上面的技术似乎工作正常,所以我要关闭这个问题。 ASDF 3 非常棒。
ASDF 不关心 .asd
文件的相对位置。 ASDF 系统及其依赖项与 file/directory 结构完全正交,并且不受任何源版本控制的影响。
它只是在几个位置查找 .asd
个文件。然后每个这样的文件都可能包含系统的定义。它通常会递归到配置的文件夹中,因此通常也会找到 git 子模块中的任何 .asd
文件。
定义,e。 G。 .asd
文件内的组件然后从该文件的位置相对工作。
在您的示例中,如果您为 "foo"
系统提供 :depends-on ("bar")
选项,它就会正常工作,无论 bar.asd
位于何处(只要它位于某个地方) ASDF 找到了它)。
如果您有一个库的多个版本,则需要多一点认识。如果您同时使用 "foo" 和 "bar",则可能会发生这种情况,而 "bar" 的稳定版本也可用,例如。 G。在 quicklisp 区。然后查找顺序开始发挥作用,但通常您的“个人”目录优先于“系统”目录,所以同样,它会 正常工作 。要获得更多控制,您可能需要查看 qlot
.
我知道使用 :module
s,但是当系统嵌套时怎么办?假设我有以下结构,相对于一些未知的用户目录:
foo/
-foo.asd
-bar/
--bar.asd
这可能会出现,例如,当使用 Git 子模块时。我应该如何配置 foo.asd
中的 (defsystem)
调用以将 bar
作为依赖项加载,而不修改 foo/
之外的配置文件或要求 foo/
的特定位置] 树本身?感觉应该很简单。
2020 年 2 月 3 日: 来自@Svante 的 foo/
and bar/
both get into the *source-registry*
?' The ASDF manual 让我认为这应该可以解决问题:
(asdf:initialize-source-registry
'(:source-registry
(:tree "«absolute-path-to-foo»/")
:inherit-configuration))
虽然我还没有看到这种用法的例子。
2020 年 3 月 26 日: 上面的技术似乎工作正常,所以我要关闭这个问题。 ASDF 3 非常棒。
ASDF 不关心 .asd
文件的相对位置。 ASDF 系统及其依赖项与 file/directory 结构完全正交,并且不受任何源版本控制的影响。
它只是在几个位置查找 .asd
个文件。然后每个这样的文件都可能包含系统的定义。它通常会递归到配置的文件夹中,因此通常也会找到 git 子模块中的任何 .asd
文件。
定义,e。 G。 .asd
文件内的组件然后从该文件的位置相对工作。
在您的示例中,如果您为 "foo"
系统提供 :depends-on ("bar")
选项,它就会正常工作,无论 bar.asd
位于何处(只要它位于某个地方) ASDF 找到了它)。
如果您有一个库的多个版本,则需要多一点认识。如果您同时使用 "foo" 和 "bar",则可能会发生这种情况,而 "bar" 的稳定版本也可用,例如。 G。在 quicklisp 区。然后查找顺序开始发挥作用,但通常您的“个人”目录优先于“系统”目录,所以同样,它会 正常工作 。要获得更多控制,您可能需要查看 qlot
.