如何告诉ASDF仅在组件文件存在的情况下对其进行处理(因此,如果尚不存在则不会生成错误)。
(asdf:defsystem "my-system"
:components ((:file "utilities")
(:file "temp-file" :depends-on ("utilities"))))
我的解决方法是使用阅读器宏#。在(probe-file "temp-file")
上运行,但无法正常工作。
答案 0 :(得分:1)
我认为您真正想要做的是让ASDF仅仅警告您,而不是在编译错误时启动调试器。更改*compile-file-warnings-behaviour*
和*compile-file-failure-behaviour*
,并阅读手册中的the section on error handling。
此答案的其余部分是如何检查整个系统。您可以将可能要加载的文件打包到他们自己的系统中,然后在下面用这种方式完成。
6.3.8弱依赖
我们不建议您使用此功能。
因此您仍然可以使用它。像这样:
(defpackage :foo-system
(:use :cl :asdf))
(in-package :foo-system)
(defsystem foo
:description "The main package that maybe loads bar if it exists."
:weakly-depends-on (:bar)
:components ((:file "foo")))
简单吗?
这是他们的建议:
如果您倾向于编写弱依赖于系统的系统foo 系统栏,我们建议您改为在 参数方式,并提供一些特殊的变量和/或一些挂钩 专门研究其行为;那么您应该编写一个系统foo + bar 将事物钩在一起。
我从来没有在野外见过这些东西之一,可能是因为这样做很可怕,令人困惑。
(defpackage :bar-system
(:use :cl :asdf))
(in-package :bar-system)
(defsystem bar
:description "The package that maybe exists and is needed by foo."
:components ((:file "bar")))
(defpackage :foo+bar-system
(:use :cl :asdf))
(in-package :foo+bar-system)
(defsystem foo+bar
:version "0.1.0"
:description "Hook together foo and bar."
:author "Spenser Truex <web@spensertruex.com>"
:serial t
:components ((:file "foo+bar")))
(defpackage :foo-system
(:use :cl :asdf))
(in-package :foo-system)
(defsystem foo
:description "The main package that maybe loads bar if it exists."
:depends-on (:foo+bar)
:components ((:file "foo")))