【问题标题】:Can a file in a system depend on a file from another system?系统中的文件可以依赖于另一个系统中的文件吗?
【发布时间】:2019-10-29 06:11:27
【问题描述】:

我正在阅读 Practical Common Lisp 这本书,现在已经读到第 25 章了。对于每一章,我在书的文件夹中创建一个文件夹,其中包含该章的系统定义文件、包定义文件和代码。在第 25 章中,我需要在第 24 章中构建的包,因此第 25 章的包定义如下所示:

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

但是第 24 章包不在第 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]

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

【问题讨论】:

    标签: common-lisp system asdf


    【解决方案1】:

    简而言之,不,但您可以依赖其他系统。

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

    chapter-25.asd:

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

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

    在系统“chapter-25”的代码中,您可以假设系统“chapter-24”中定义的包被加载并且可以被引用,例如。 G。通过defpackage:use选项:

    (defpackage #:chapter-25
      (:use (#:cl #:chapter-24)))
    

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 但这需要有一个包含两个系统的顶级系统,不是吗?
      猜你喜欢
      • 2018-10-21
      • 1970-01-01
      • 2021-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-20
      • 2010-09-28
      • 2013-08-09
      相关资源
      最近更新 更多