Если вы вообще не хотите включать вызов quicklisp в развернутый исходный код, отделите файл определения системы quickproject от остальной части источника.
В верхней части источника, перед вызовом defpackage
, добавьте необходимые (require ...)
для зависимостей вашего пакета. Это гарантирует, что эти пакеты lisp загружаются (каким-либо образом) перед продолжением, но не указывает, как эти пакеты загружаются. Их можно загрузить, выполнив вызов ql:quickload :my-package
(используя quickproject), который сначала загрузит зависимости, а затем выполнит вызовы require при загрузке источника. Или, возможно, пользователь может загрузить источник напрямую (без вызова ql:quickload
), и зависимости будут загружены во время вызова require, если эти зависимости можно найти в *module-search-path*
. Этот метод, как вы сказали, позволит конечному пользователю использовать любой инструмент для сборки, который он / она хочет загрузить ваш источник.
После экспериментов с этим в течение нескольких минут кажется, что quicklisp фиксирует вызов функции require, так что если установлен quicklisp и вызывается (require :bordeaux-threads)
например, lisp будет использовать quicklisp для загрузки и установки этой зависимости. Это очень хорошая функция (IMO), потому что она позволяет стандартной функции require
Common Lisp выступать в качестве интерфейсного уровня и абстрагирует конкретный инструмент сборки, используемый для удовлетворения зависимости. Quicklisp может зафиксировать нужное, asdf защёлкнуть (IIRC) и т. Д.
Таким образом, чтобы ответить на ваш вопрос, вызовы quicklisp не должны идти куда-либо в развернутом исходном коде, и следует использовать requires
, чтобы гарантировать, что зависимости загружаются до оценки файла определения пакета. Если кто-то установил quicklisp перед загрузкой файла определения пакета, эти требования будут удовлетворены с помощью quicklisp для загрузки и установки зависимостей. Если кто-то установил asdf, эти зависимости будут удовлетворены этим инструментом сборки. И если кто-то уже установил зависимости (используя другую технику), то требования будут просто пропущены.