是否有一种方法可以使可配置的ASDF系统根据用户配置变量加载不同的lisp文件?最好的情况是,如果没有提供所需的配置变量,则加载过程将失败,并带有清晰的错误消息。在加载系统时,如何方便地设置这些变量?(手动,通过quicklisp,或从另一个系统定义文件)
发布于 2015-04-10 16:04:20
请不要在defsystem表单中使用#+和#-,而是:if-feature。
另外,执行运行时差异化或者根据特性有一个完全不同的系统目标要好得多,而不是有一个目标以构建系统看不到的不负责的方式改变它的含义。
发布于 2015-04-10 05:21:31
不是从盒子里拿出来,但你可以安排一些类似的东西。更改系统加载的文件的最简单方法是结合使用#+/-和*features*。
添加功能的一种方法是在.sbclrc (或您的实现启动文件)中添加功能,如果您想要更具体的项目,您可以定义一个执行:在您的系统上加载一个函数来调用将读取文件的函数之前,它可以修改*features*,以便读取不同的组件。我使用此方案加载配置文件的变量。
所以如果我的系统是foo
(defsystem #:foo
...
:dependencies (#:foo-config)
...)
(defmethod perform :after ((op load-op)
(system (eql (find-system :foo-config))))
(asdf/package:symbol-call :foo/config-loader 'load-config
(system-relative-pathname :foo-config
#P"foo.config")))因为#+/-在读取时工作,我猜它不会工作,因为在读取系统定义之后,这些特性会被修改。解决这一问题的一种方法是只需要配置系统,并在设置了特性之后,使后置方法要求系统。
我的2c。
https://stackoverflow.com/questions/29537981
复制相似问题