如何将多个lisp-fasl文件链接到一个文件中?

时间:2015-07-19 13:05:12

标签: compilation load common-lisp sbcl

我开始学习lisp并且正在寻找一种管理我的个人库的有效方法。

所以我认为将我的库编译成单个fasl文件(包含包信息和实际实现)会很有用,然后我可以加载(load "lib.fasl")来包含库。问题是,该库由多个 * .lisp - 文件组成,例如 foo.lisp bar.lisp

我分别使用(compile-file "foo.lisp")(compile-file "bar.lisp")分别编译它们。

显然,当我想要手动LOAD库的每个文件(即 foo.fasl bar.fasl )时,它会非常混乱使用它们,所以我正在寻找像

这样的东西
(link "foo.fasl" "bar.fasl" :output "lib.fasl")

(compile-file "foo.lisp" "bar.lisp" :output "lib.fasl")  

生成一个 lib.fasl ,然后我可以LOAD

我不想使用核心文件,因为我希望能够灵活地组合我的库(这需要为每个可能的库组合创建一个单独的核心文件)。

我在SBCL用户手册中查找了执行此操作的lisp函数和使用CLI查看功能的SBCL联机帮助页,但我无法找到任何内容。

我更喜欢使用SBCL的解决方案,但我也会采取其他任何措施。

提前致谢!

2 个答案:

答案 0 :(得分:3)

使用cat

$ cat f1.fasl f2.fasl .... > mypackage.fasl

请注意,更常见的方法是创建images

您可能还想探索asdf

答案 1 :(得分:2)

IIRC for SBCL你只需将FASL文件连接成一个文件。

ASDF 3可以从具有所有依赖关系的系统或系统构建单个FASL文件(请参阅compile-bundle-opmonolithic-compile-bundle-op)。

在其可移植库uiop中还有一个函数combine-fasls,它支持多个CL实现。