Yellow Rabbit

Исполняемый файл вместо исходников

Lisp: создание самодостаточного исполняемого файла

Желание делать отдельный самодостаточный исполняемый файл, хотя можно просто дать исходники, немного станновато, но допустим, что такая необходимость возникла.

Проект к этому моменту уже приобрёл законченный вид и организован как локальная система quicklisp. Здесь можно прочитать как сразу создать удобную среду для разработки.

Далее нужен buildapp, это исполняемый файл, так что переходим в каталог, который у нас в ${PATH}. Для меня это ~/local/bin. Запускаем sbcl


(ql:quickload 'buildapp)
(buildapp:build-buildapp)

Переходим в каталог проекта и запускаем sbcl, загружаем наш проект (в моём случае test-cffi) и записываем его манифест.


(ql:quickload :test-cffi)
(ql:write-asdf-manifest-file "test-cffi.manifest")

И уже окончательно:


% buildapp --output test-cffi --manifest-file test-cffi.manifest \
--load-system test-cffi --entry test-cffi:main
% ls -l
-rw-r--r--  1 rabbit  rabbit      1654 01-May-2016 20:49 test-cffi.manifest
-rw-r--r--  1 rabbit  rabbit       111 01-May-2016 20:57 package.lisp
-rw-r--r--  1 rabbit  rabbit        57 17-Apr-2016 15:22 README.txt
-rwxr-xr-x  1 rabbit  rabbit  57802800 01-May-2016 22:06 test-cffi*
-rw-r--r--  1 rabbit  rabbit       280 17-Apr-2016 15:45 test-cffi.asd
-rw-r--r--  1 rabbit  rabbit      2181 01-May-2016 20:59 test-cffi.lisp

Функция main, которая дожна быть экспортирована из нашего проекта имеет вид:


(defun main (argv)
  (declare (ignore argv))
  (win-box))