Может ли файл в системе зависеть от файла из другой системы? - PullRequest
2 голосов
/ 14 июня 2019

Я читаю книгу «Практический общий Лисп» и сейчас нахожусь в главе 25.Для каждой главы я создаю папку в папке моей книги, содержащую файл определения системы главы, файл определения пакета и код.В главе 25 мне понадобится пакет, который я построил в главе 24, поэтому определение пакета для главы 25 будет выглядеть следующим образом:

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

Но пакета главы 24 нет в главе 25система.Могу ли я использовать его в этом пакете, не включая его в систему?Примечание. Они находятся в разных папках в одной папке.

Это определение моей системы.Есть ссылки на все необходимые файлы в главе 24 системы в папке главы 25.Если какие-либо из них не нужны, пожалуйста, дайте мне знать.


(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 ]

5 голосов
/ 14 июня 2019

Короче говоря, нет, но вы можете зависеть от другой системы.

Чтобы зависеть от другой системы, используйте ключ :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"загружается до загрузки системы" глава-25 ".

В коде системы" глава-25 "можно предположить, что пакеты, определенные в системе" глава-24 ", загружены ина него можно ссылаться, например, с помощью опции :use из defpackage:

(defpackage #:chapter-25
  (:use (#:cl #:chapter-24)))
2 голосов
/ 15 июня 2019

Короче говоря, да, вы можете зависеть от другой системы. Просто используйте " package inferred " ASDF system.

В этом случае каждый файл lisp будет рассматриваться как отдельная подсистема и может зависеть от файла из той же или другой системы. И зависимости будут выведены из форм defpackage.

Вот пример такой системы . Это импорт из разных файлов другой системы.

...