如何将buildapp与quicklisp结合使用

时间:2013-09-20 12:40:57

标签: common-lisp sbcl quicklisp

我想使用buildapp将curl-lisp可执行文件设为example

buildapp --output lisp-curl --asdf-path ~/src/clbuild/systems/ \
    --load-system drakma \
    --eval '(defun main (args) (write-string (drakma:http-request (second args))))' \
    --entry main

这绝对不会起作用,因为我没有路径“〜/ src / clbuild / systems /”,因为我使用quicklisp我的系统应该在“〜/ quicklisp / dists / quicklisp / software”,但是当我执行:

buildapp --output lisp-curl  \
         --asdf-path ~/quicklisp/dists/quicklisp/software      \
         --load-system drakma     \
         --eval '(defun main (args) (write-string (drakma:http-request (second args))))'   \
         --entry main

; file: /home/simkoc/dumper-YKYna1b3.lisp
; in: DEFUN DUMP-FILE-DEBUGGER
;     (QUIT :UNIX-STATUS 111)
; 
; caught STYLE-WARNING:
;   SB-EXT:QUIT has been deprecated as of SBCL 1.0.56.55. Use SB-EXT:EXIT or
;   SB-THREAD:ABORT-THREAD instead.
;   
;   In future SBCL versions SB-EXT:QUIT will signal a full warning at compile-time.
; 
; compilation unit finished
;   caught 1 STYLE-WARNING condition
Fatal MISSING-COMPONENT:
  Component "drakma" not found

This回答一个问题已经提示,quicklisp能够以buildapp能够检索它的方式导出其系统,但遗憾的是没有详细说明。

我也尝试退出--asdf-path,因为SBCL(启动时)已经能够使用(require 'drakma)(asdf:load-system "drakma")加载Drakma。使用--require代替--load-system也无法达成交易。

因此:我如何将buildapp与quicklisp结合使用,以使用所需的系统制作可执行文件(我只是关于MISSING-COMPONENT PART的汽车)

1 个答案:

答案 0 :(得分:13)

如果已经在quicklisp中安装了Drakma,我认为如果您使用--asdf-tree而不是--asdf-path,您的示例将会有效。但是将Quicklisp目录用作树可能会导致一些麻烦,因为并非树中的每个系统文件都要加载。

还有另一种选择可以与Quicklisp对可用系统的了解更紧密地集成。这是我的所作所为:

sbcl --no-userinit --no-sysinit --non-interactive \
     --load ~/quicklisp/setup.lisp \
     --eval '(ql:quickload "drakma")' \
     --eval '(ql:write-asdf-manifest-file "quicklisp-manifest.txt")'

buildapp --manifest-file quicklisp-manifest.txt --load-system drakma [the rest of your options]

第一个命令确保已下载drakma,并且Quicklisp知道的系统索引位于quicklisp-manifest.txt中。第二个使用该索引来使用已安装的Quicklisp系统构建应用程序。