如何构建Common Lisp项目?

 雅茹敬俐6999 发布于 2023-02-10 14:21

我是CL的新手,我无法弄清楚如何从我的简单项目中构建二进制文件.

我创建了app.asd包含以下内容的文件:

(asdf:defsystem game
  :version "0.0.1"
  :components ((:file "package")
               (:file "main")))

package.lisp 内容

(defpackage :app 
  (:use :common-lisp :asdf) 
  (:export :start))

main.lisp

(in-package :app)

(defun start (args)
  (format t "Hello"))

我也符号链接app.asd~/quicklisp/quicklisp/app.asd,当我执行

(require 'asdf)
(asdf:operate 'asdf:load-op :app)

它看起来像编译的东西,但我无法在任何地方找到二进制文件/目标文件.

如何构建我的项目,以便将其复制到另一台没有安装CL并运行的机器上?

我在osx上使用sbcl 1.1.13和asdf 3.0.2.

1 个回答
  • 不要放入.asd文件~/quicklisp/quicklisp/.请~/quicklisp/local-projects/改用.

    你的startdefun 的语法是错误的.它需要一个lambda列表.

    Common Lisp通常用于启动环境,加载应用程序,然后交互式调用应用程序定义的函数.加载过程将源代码编译为机器代码,交互调用的函数是编译函数.

    当我想创建一个二进制文件时,我可以从命令行运行,我使用buildapp.在你的情况下,你可以做这样的事情:

    sbcl --no-userinit --no-sysinit --non-interactive --load ~/quicklisp/setup.lisp \
      --eval '(ql:write-asdf-manifest-file "systems.txt")'
    
    buildapp --manifest-file systems.txt \
      --manifest-file ~/quicklisp/local-projects/system-index.txt \
      --load-system game \
      --entry app::start \
      --output game
    

    在此方案中,您必须修改app::start以接受一个参数,一个包含传递给所有命令行参数字符串的列表game.

    通常,大多数Common Lisps都有一些方法可以生成一个独立于正常运行时运行的二进制程序.术语各不相同,但通常称为"交付".如果您将来使用其他Common Lisp,如果您在文档中搜索有关交付的信息,则可能会获得更多信息.

    2023-02-10 14:22 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有