Compilation 使用ASDF将编译结果作为单个文件获取

Compilation 使用ASDF将编译结果作为单个文件获取,compilation,lisp,common-lisp,asdf,Compilation,Lisp,Common Lisp,Asdf,是否可以告诉ASDF,它应该只为整个系统生成一个fas(l)文件?该文件应是系统所有编译文件的串联(按正确顺序),包括目标系统所依赖的系统的所有文件。是,带有编译包op(ASDF 3.1): 编辑:实际上,单片编译捆绑包op似乎需要(如其他答案所示)。选项单片编译捆绑包op将创建包含所有依赖项的单个编译文件,而编译捆绑包op为每个系统创建一个文件 使用示例: (asdf:operate 'asdf:monolithic-compile-bundle-op :my-system) 此命令将在目标

是否可以告诉ASDF,它应该只为整个系统生成一个
fas(l)
文件?该文件应是系统所有编译文件的串联(按正确顺序),包括目标系统所依赖的系统的所有文件。

是,带有
编译包op
(ASDF 3.1):


编辑:实际上,
单片编译捆绑包op
似乎需要(如其他答案所示)。

选项
单片编译捆绑包op
将创建包含所有依赖项的单个编译文件,而
编译捆绑包op
为每个系统创建一个文件

使用示例:

(asdf:operate 'asdf:monolithic-compile-bundle-op :my-system)

此命令将在目标项目的输出目录中创建文件
mysystem--all systems.fas(l)
,以及每个系统的“bundle”文件,命名为
mysystem--system.fas(l)

如果必须预测扩展名,请使用
uiop:compile file type

和/或您可以调用
(asdf:output files'asdf:单片编译包op:my system)
,以了解实际使用的是什么。

如果您在加载二进制文件之外有副作用,我建议您不要这样做。例如,如果您的ASDF系统中有一个依赖于实现的
require
,则在加载连接的二进制文件时不会发生这种情况,您将得到的最佳线索是未知包的错误或未定义函数的样式警告(稍后为运行时错误)。这就是说,对于大型系统来说,单个二进制可能值得逐个研究。这种方法不会节省很多时间或空间。如果你有一个共同的基础,你可以转储一个图像以节省时间。