Common lisp 使用ASDF加载可选组件
如何告诉ASDF仅在组件文件存在时处理该文件(因此,如果组件文件还不存在,它不会生成错误)Common lisp 使用ASDF加载可选组件,common-lisp,asdf,Common Lisp,Asdf,如何告诉ASDF仅在组件文件存在时处理该文件(因此,如果组件文件还不存在,它不会生成错误) 我的解决方法是使用读取器宏。在(探测文件“temp file”)上,但无法使其工作。我认为您真正想做的是让ASDF在编译错误期间仅警告您,而不是启动调试器。更改*编译文件警告行为*和*编译文件失败行为*,并阅读手册 这个答案的其余部分是如何检查整个系统。您可以将文件打包,以便将文件加载到它们自己的系统中,并在下面这样做 从 6.3.8弱依赖于 我们不建议您使用此功能 所以你无论如何都可以用它。像这样: (
我的解决方法是使用读取器宏。在
(探测文件“temp file”)
上,但无法使其工作。我认为您真正想做的是让ASDF在编译错误期间仅警告您,而不是启动调试器。更改*编译文件警告行为*
和*编译文件失败行为*
,并阅读手册
这个答案的其余部分是如何检查整个系统。您可以将文件打包,以便将文件加载到它们自己的系统中,并在下面这样做
从
6.3.8弱依赖于
我们不建议您使用此功能
所以你无论如何都可以用它。像这样:
(defpackage:foo系统
(:用法:cl:asdf))
(包装内:foo系统)
(def系统foo)
:description“如果存在,可能会加载bar的主包。”
:弱依赖于(:bar)
:组件((:文件“foo”))
简单对吧
以下是他们的建议:
如果您试图编写一个弱依赖于
在系统栏中,我们建议您改为在
参数化方式,并提供一些特殊变量和/或一些挂钩
使其行为专门化;然后您应该编写一个系统foo+bar
把东西挂在一起
我从来没有在野外见过这样的东西,可能是因为那样做是一个可怕的混乱局面
(defpackage:bar系统
(:用法:cl:asdf))
(包装内:条形系统)
(除霜系统棒
:description“可能存在且foo需要的包。”
:组件((:文件“bar”))
(defpackage:foo+bar系统
(:用法:cl:asdf))
(包装内:foo+bar系统)
(除油系统油+巴
:版本“0.1.0”
:description“将foo和bar钩在一起”
:作者“Spenser Truex”
:序列号t
:组件((:文件“foo+bar”))
(def包:foo系统
(:用法:cl:asdf))
(包装内:foo系统)
(def系统foo)
:description“如果存在,可能会加载bar的主包。”
:取决于(:foo+bar)
:组件((:文件“foo”))
。不知道它是否做了你想要的,所以不要把它作为答案。你为什么要这么做?是的,这看起来像是在生成源文件,我个人认为这是一个反模式。您实际上想要实现什么?有时绕过编译和加载问题规范文件以及系统,这完全是一种开发便利。我想我可以创建一个虚拟规范,但我认为只检查规范文件是否存在会更容易。如果你想屏蔽一个文件,为什么不在文件内容周围添加注释语法呢?ASDF将在加载“空”(根据lisp读取器)文件时成功。
(asdf:defsystem "my-system"
:components ((:file "utilities")
(:file "temp-file" :depends-on ("utilities"))))