系统中的文件可以依赖于另一个系统中的文件吗?
Can a file in a system depend on a file from another system?
我正在阅读《Practical Common Lisp》一书,现在读到第 25 章。对于每一章,我都会在我的书的文件夹中创建一个文件夹,其中包含该章的系统定义文件、包定义文件和代码。在第 25 章中,我将需要在第 24 章中构建的包,因此第 25 章的包定义如下所示:
(defpackage :chapter-25-package (:use :common-lisp :chapter-24-package))
但是第25章系统中没有第24章包。我可以在这个包中使用它而不必将它包含在系统中吗?注意:它们位于同一文件夹内的不同文件夹中。
这是我的系统定义。第 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]
编辑:这是我提出的第二个问题,如果有任何不好的做法,我很抱歉。如果你告诉我,我将不胜感激。
总之没有,但是可以依赖其他系统
为了依赖不同的系统,在系统定义中使用:depends-on
键。
chapter-25.asd
:
(defsystem "chapter-25"
:depends-on ("chapter-24")
:components ((:file "package")
(:file "chapter-25" :depends-on ("package"))))
假设系统"chapter-24"定义在ASDF可以找到的文件"chapter-24.asd"中,这使得ASDF确保系统"chapter-24"在系统[=29之前加载=] 已加载。
在系统"chapter-25"的代码中,您可以假定系统"chapter-24"中定义的包被加载并可以被引用,例如。 G。通过 defpackage
的 :use
选项:
(defpackage #:chapter-25
(:use (#:cl #:chapter-24)))
总之,是的,你可以依赖其他系统。只需使用“package inferred”ASDF系统即可。
在这种情况下,每个 lisp 文件都将被视为一个单独的子系统,并且可以依赖于来自同一系统或另一个系统的文件。依赖关系将从 defpackage 形式推断出来。
这是一个example of such a system。
这些是从另一个系统的不同文件导入的。
我正在阅读《Practical Common Lisp》一书,现在读到第 25 章。对于每一章,我都会在我的书的文件夹中创建一个文件夹,其中包含该章的系统定义文件、包定义文件和代码。在第 25 章中,我将需要在第 24 章中构建的包,因此第 25 章的包定义如下所示:
(defpackage :chapter-25-package (:use :common-lisp :chapter-24-package))
但是第25章系统中没有第24章包。我可以在这个包中使用它而不必将它包含在系统中吗?注意:它们位于同一文件夹内的不同文件夹中。
这是我的系统定义。第 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]
编辑:这是我提出的第二个问题,如果有任何不好的做法,我很抱歉。如果你告诉我,我将不胜感激。
总之没有,但是可以依赖其他系统
为了依赖不同的系统,在系统定义中使用:depends-on
键。
chapter-25.asd
:
(defsystem "chapter-25"
:depends-on ("chapter-24")
:components ((:file "package")
(:file "chapter-25" :depends-on ("package"))))
假设系统"chapter-24"定义在ASDF可以找到的文件"chapter-24.asd"中,这使得ASDF确保系统"chapter-24"在系统[=29之前加载=] 已加载。
在系统"chapter-25"的代码中,您可以假定系统"chapter-24"中定义的包被加载并可以被引用,例如。 G。通过 defpackage
的 :use
选项:
(defpackage #:chapter-25
(:use (#:cl #:chapter-24)))
总之,是的,你可以依赖其他系统。只需使用“package inferred”ASDF系统即可。
在这种情况下,每个 lisp 文件都将被视为一个单独的子系统,并且可以依赖于来自同一系统或另一个系统的文件。依赖关系将从 defpackage 形式推断出来。
这是一个example of such a system。 这些是从另一个系统的不同文件导入的。