10

我想使用 buildapp 来制作 curl-lisp 可执行文件,例如

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

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

我还尝试不使用--asdf-path,因为 SBCL(启动时)已经能够使用(require 'drakma)or加载 Drakma (asdf:load-system "drakma")。也使用--require而不是--load-system不会做交易。

因此:我如何将 buildapp 与 quicklisp 结合使用来制作具有所需系统的可执行文件(我只是关心 MISSING-COMPONENT PART)

4

1 回答 1

17

如果 Drakma 已经安装在 quicklisp 中,我认为如果您使用--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 系统构建应用程序。

于 2013-09-20T14:01:07.300 回答