我知道使用:module
s,但是什么时候嵌套系统呢?相对于一些未知的用户目录,假设我具有以下结构:
foo/
-foo.asd
-bar/
--bar.asd
例如,在使用Git子模块时,可能会出现这种情况。我应该如何配置(defsystem)
调用以foo.asd
将其bar
作为依赖项加载,而无需修改树本身之外的配置文件foo/
或不要求对foo/
树本身进行特定放置?感觉应该很简单。
2020年2月3日:从@斯万的答案,这听起来像我的问题是真的'如何动态地保证foo/
和bar/
双方进入*source-registry*
?该ASDF手册让我觉得这应该做的伎俩:
(asdf:initialize-source-registry
'(:source-registry
(:tree "«absolute-path-to-foo»/")
:inherit-configuration))
尽管我还没有看到这种用法的示例。
2020年3月26日:上面的技术似乎很好用,所以我要解决这个问题。ASDF 3非常好。
ASDF不在乎.asd
文件的相对位置。ASDF系统及其依赖项与文件/目录结构完全正交,而对任何源版本控制均无视。
它只是在几个位置查找.asd
文件。然后,每个这样的文件都可以包含系统的定义。它通常会递归到配置的文件夹中,因此.asd
通常也会在git子模块中找到任何文件。
然后,.asd
从文件的位置开始相对于文件内部的组件定义进行定义。
在您的示例中,如果:depends-on ("bar")
为"foo"
系统提供一个选项,则无论它在哪里bar.asd
(只要它在ASDF可以找到的地方),它都可以工作。
如果您有多个版本的库,则需要更多的了解。如果您同时使用“ foo”和“ bar”,而又有稳定版本的“ bar”,例如在quicklisp dist中,则可能会发生这种情况。然后查找顺序开始起作用,但是通常您的“个人”目录优先于“系统”目录,因此同样可以使用。要获得更多控制权,您可能需要研究qlot
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句