Gab*_*ero 2 system common-lisp asdf
我正在阅读《实用的通用Lisp》一书,现在在第25章。对于每一章,我在书的文件夹中创建一个文件夹,其中包含该章的系统定义文件,程序包定义文件和代码。在第25章中,我需要在第24章中构建的软件包,因此第25章的软件包定义将如下所示:
(defpackage :chapter-25-package (:use :common-lisp :chapter-24-package))
Run Code Online (Sandbox Code Playgroud)
但是Chapter 24-package不在Chapter 25系统中。是否可以在此软件包中使用它而不必将其包含在系统中?注意:它们位于同一文件夹中的单独文件夹中。
这是我的系统定义。在第25章文件夹中的第24章系统中,有指向所有必需文件的链接。如果没有必要,请告诉我。
(defpackage :chapter-25-package (:use :common-lisp :chapter-24-package))
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误:
(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"))
Run Code Online (Sandbox Code Playgroud)
编辑:这是我提出的第二个问题,所以对不起,如果有任何不好的做法。如果您让我知道,我将不胜感激。
简而言之,不是,但是您可以依赖其他系统。
为了依赖其他系统,请:depends-on
在系统定义中使用键。
chapter-25.asd
:
(defsystem "chapter-25"
:depends-on ("chapter-24")
:components ((:file "package")
(:file "chapter-25" :depends-on ("package"))))
Run Code Online (Sandbox Code Playgroud)
假设在文件“ chapter-24.asd”中定义了系统“ chapter-24”,ASDF可以在其中找到它,这使ASDF确保在系统“ chapter-25”被加载之前已加载系统“ chapter-24”。已加载。
然后,在系统“ chapter-25”的代码中,可以假定系统“ chapter-24”中定义的软件包已加载并可以被引用,例如,通过以下:use
选项defpackage
:
(defpackage #:chapter-25
(:use (#:cl #:chapter-24)))
Run Code Online (Sandbox Code Playgroud)