common-lisp - 通用 Lisp : defsystem howto set files to load depending on predicate?

标签 common-lisp asdf

使用 OpenCl 和 OpenGl 编写项目,部分代码取决于所使用的 GPU 和 OpenCL 驱动程序。这不是很简单,因为类必须以不同的方式定义,因此我不想在不同的文件中使用内联 #+ 和 #- ,这会使代码变得非常困惑,我更愿意将特定于不同体系结构的代码分成不同的目录,例如通过评估 .asd 文件开头的代码来区分硬件,使用它来确定(设置)稍后在 .asd 文件中加载哪些文件(例如,基于在开头评估的例程中的某些谓词或功能集)。

我对理论上的可能性有点迷失和不知所措。有人可以提供建议,这将是一个可行且类似 cl 的解决方案吗?

最佳答案

通过在任何 defsystem 语句之前在 .asd 文件开头执行代码来确定确切的平台并向 *features* 添加合适的关键字来解决此问题。在 defsystem 表单的 :components 部分中,可以通过将“:if-feature <:feature>”添加到相应的 (:file ...) 表单来指定应加载的特定文件。尽管可能有更合适的方法来完成此任务:cl 规则!

关于common-lisp - 通用 Lisp : defsystem howto set files to load depending on predicate?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73570357/

相关文章:

用于 mapcar 的 lambda 中的 Lisp 操作顺序

方案或 Common Lisp

common-lisp - 使用 ASDF 的 :around-compile For Individual Files

common-lisp - (ASDF 3) 如何将文件|组件标记为 "dirty"或需要重建?

lisp - 为 Common Lisp 项目自动创建 ASDF 文件

recursion - 从 Common Lisp 的列表中删除一个元素?

lisp - push 没有像我预期的那样工作 - 为什么?

math - LISP 中的向量计算

windows - 如何使用 asdf uiop :run-program under sbcl 从 Lisp 运行 Windows shell 命令