Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Common lisp 使用ASDF加载可选组件_Common Lisp_Asdf - Fatal编程技术网

Common lisp 使用ASDF加载可选组件

Common lisp 使用ASDF加载可选组件,common-lisp,asdf,Common Lisp,Asdf,如何告诉ASDF仅在组件文件存在时处理该文件(因此,如果组件文件还不存在,它不会生成错误) 我的解决方法是使用读取器宏。在(探测文件“temp file”)上,但无法使其工作。我认为您真正想做的是让ASDF在编译错误期间仅警告您,而不是启动调试器。更改*编译文件警告行为*和*编译文件失败行为*,并阅读手册 这个答案的其余部分是如何检查整个系统。您可以将文件打包,以便将文件加载到它们自己的系统中,并在下面这样做 从 6.3.8弱依赖于 我们不建议您使用此功能 所以你无论如何都可以用它。像这样: (

如何告诉ASDF仅在组件文件存在时处理该文件(因此,如果组件文件还不存在,它不会生成错误)


我的解决方法是使用读取器宏。在
(探测文件“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"))))