如何将buildapp与quicklisp结合使用

Sim*_*Sim 8 sbcl common-lisp quicklisp

我想使用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
Run Code Online (Sandbox Code Playgroud)

这绝对不会起作用,因为我没有路径"〜/ 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
Run Code Online (Sandbox Code Playgroud)

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

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

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

Xac*_*ach 14

如果已经在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]
Run Code Online (Sandbox Code Playgroud)

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

  • 我是通过首先通过quickload构建目标系统来实现的.这将获取所有必需的库并使它们可以写入清单.然后第二遍通过buildapp进行实际建筑. (2认同)