(ASDF 3) Можно ли рекурсивно загружать системы в подкаталогах? - PullRequest
1 голос
/ 01 февраля 2020

Я знаю об использовании :module s, но как насчет того, когда системы будут вложенными? Предположим, у меня есть следующая структура относительно некоторого неизвестного пользовательского каталога:

foo/
-foo.asd
-bar/
--bar.asd

Это может возникнуть, например, при использовании субмодулей Git. Как мне настроить вызов (defsystem) в foo.asd для загрузки bar в качестве зависимости, не изменяя конфигурационный файл за пределами foo/ или не требуя конкретного размещения для самого дерева foo/? Чувствуется, что все должно быть просто.

3 февраля 2020: Из ответа @ Svante звучит так, будто мой вопрос действительно «Как мне динамически убедиться, что foo/ и bar/ оба попадают в *source-registry*? ' Руководство ASDF заставляет меня думать, что это должно сработать:

(asdf:initialize-source-registry 
  '(:source-registry 
    (:tree "«absolute-path-to-foo»/")
    :inherit-configuration))

, хотя я не видел пример такого использования.

26 марта. 2020: Техника выше работает нормально, поэтому я закрываю этот вопрос. ASDF 3 отлично.

1 Ответ

0 голосов
/ 02 февраля 2020

ASDF не заботится об относительном расположении файлов .asd. Системы ASDF и их зависимости полностью ортогональны структуре файлов / каталогов и не обращают внимания на любой источник контроля версий.

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

Определения, например компонентов внутри файла .asd, будут работать относительно из местоположения этого файла.

В вашем примере, если вы дадите опцию :depends-on ("bar") системе "foo", она будет просто работать, независимо от того, где находится bar.asd (до тех пор, пока она есть). где ASDF найдет его).

Если у вас несколько версий библиотеки, потребуется немного больше знаний. Это может произойти, если вы одновременно работаете с «foo» и «bar», в то время как стабильная версия «bar» также доступна, например, в списке быстрых клавиш. Затем вступает в порядок порядок поиска, но обычно ваши «личные» каталоги имеют приоритет над «системными» каталогами, так что, опять же, просто будет работать . Для большего контроля вы можете заглянуть в qlot.

...