一个系统中的文件可以依赖于另一个系统中的文件吗?

时间:2019-06-14 15:13:51

标签: common-lisp system asdf

我正在阅读《实用的普通Lisp》一书,现在在第25章。对于每一章,我在书的文件夹中创建一个文件夹,其中包含该章的系统定义文件,程序包定义文件和代码。在第25章中,我需要在第24章中构建的软件包,因此第25章的软件包定义将如下所示:

(defpackage :chapter-25-package (:use :common-lisp :chapter-24-package))

但是,Chapter 24-package不在Chapter 25系统中。是否可以在此软件包中使用它而不必将其包含在系统中?注意:它们位于同一文件夹中的单独文件夹中。

这是我的系统定义。在第25章文件夹中的第24章系统中,有指向所有必需文件的链接。如果不需要它们,请告诉我。


(defpackage #:chapter-25-asd (:use :cl :asdf) (:export :chapter-25-system))
(in-package :chapter-25-asd)

(defsystem chapter-25-system
  :name 'chapter-25-system
  :components
  ((:file "chapter-25-package" :depends-on ("chapter-24-package"))
   (:file "chapter-25" :depends-on ("chapter-25-package")))
  :depends-on ("chapter-24-system"))

这是我得到的错误:


Component "chapter-24-package" not found, required by
#<CL-SOURCE-FILE "chapter-24-system" "chapter-24">
   [Condition of type ASDF/FIND-COMPONENT:MISSING-DEPENDENCY]

编辑:这是我提出的第二个问题,对不起,如果有任何不好的做法,我感到抱歉。如果您让我知道,我将不胜感激。

2 个答案:

答案 0 :(得分:5)

总之,不,但是您可以依赖于其他系统。

为了依赖其他系统,请在系统定义中使用:depends-on键。

chapter-25.asd

(defsystem "chapter-25"
  :depends-on ("chapter-24")
  :components ((:file "package")
               (:file "chapter-25" :depends-on ("package"))))

假设在文件“ chapter-24.asd”中定义了系统“ chapter-24”,ASDF可以在其中找到该文件,这使ASDF确保在系统“ chapter-24”之前加载系统“ chapter-24” 25“已加载。

然后,在系统“ chapter-25”的代码中,可以假定已装载并可以引用在系统“ chapter-24”中定义的软件包。 G。通过:use的{​​{1}}选项:

defpackage

答案 1 :(得分:2)

简而言之,是的,您可以依赖其他系统。只需使用“ package inferred” ASDF系统即可。

在这种情况下,每个lisp文件将被视为一个单独的子系统,并且可以依赖于来自同一系统或另一个系统的文件。依赖关系将从defpackage形式中推断出来。

这里是example of such a system。 这些是从另一个系统的不同文件导入的。

相关问题