Загрузка дополнительного компонента с помощью ASDF - PullRequest
3 голосов
/ 06 июня 2019

Как вы говорите ASDF обрабатывать файл компонента, только если он существует (поэтому он не генерирует ошибку, если он еще не существует).

(asdf:defsystem "my-system"
  :components ((:file "utilities")
               (:file "temp-file" :depends-on ("utilities"))))

Мой обходной путь использует ридермакрос #.на (probe-file "temp-file"), но не могу заставить это работать.

1 Ответ

1 голос
/ 19 июня 2019

Я думаю, что вы на самом деле пытаетесь сделать так, чтобы ASDF просто предупреждал вас, а не вызывал отладчик во время ошибок компиляции. Измените *compile-file-warnings-behaviour* и *compile-file-failure-behaviour* и прочитайте раздел по обработке ошибок в руководстве.

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

Из Руководства ASDF, раздел 6.3.8 .

6.3.8 Слабо зависит от

Мы НЕ рекомендуем использовать эту функцию.

Так что вы могли бы просто использовать его в любом случае. Как это:

(defpackage :foo-system
  (:use :cl :asdf))
(in-package :foo-system)
(defsystem foo
  :description "The main package that maybe loads bar if it exists."
  :weakly-depends-on (:bar)
  :components ((:file "foo")))

Просто верно?

Вот что они рекомендуют:

Если у вас возникнет желание написать систему foo, которая слабо зависит от Системная строка, мы рекомендуем вместо этого написать системный Foo в параметрический способ, и предложить некоторую специальную переменную и / или некоторую зацепку специализировать его поведение; тогда вы должны написать системный foo + bar, который делает сцепление вещей вместе.

Я никогда не видел ни одного из них в дикой природе, возможно потому, что делать это таким ужасным путаницей.

(defpackage :bar-system
  (:use :cl :asdf))
(in-package :bar-system)
(defsystem bar
  :description "The package that maybe exists and is needed by foo."
  :components ((:file "bar")))

(defpackage :foo+bar-system
  (:use :cl :asdf))
(in-package :foo+bar-system)
(defsystem foo+bar
  :version      "0.1.0"
  :description  "Hook together foo and bar."
  :author       "Spenser Truex <web@spensertruex.com>"
  :serial       t
  :components ((:file "foo+bar")))

(defpackage :foo-system
  (:use :cl :asdf))
(in-package :foo-system)
(defsystem foo
  :description "The main package that maybe loads bar if it exists."
  :depends-on (:foo+bar)
  :components ((:file "foo")))
...