Common lisp 快速加载与编译系统

Common lisp 快速加载与编译系统,common-lisp,asdf,quicklisp,Common Lisp,Asdf,Quicklisp,我是Lisp项目结构的新手,我在Lisp中完成了我的第一个更大的项目。这就是为什么我从一个由quickproject:makeproject制作的项目框架开始。在这之后,我的第一个想法是创建一个文件夹结构,但我不知道我到底想怎么做,所以我只制作了几个文件来将代码拆分成几个文件 我将一些代码放在名为pixel.lisp的文件中,一些放在gameview.lisp中,主循环在pixelworld.lisp中 我的asd文件如下所示: ;;;; pixelworld.asd (asdf:defsys

我是Lisp项目结构的新手,我在Lisp中完成了我的第一个更大的项目。这就是为什么我从一个由
quickproject:makeproject
制作的项目框架开始。在这之后,我的第一个想法是创建一个文件夹结构,但我不知道我到底想怎么做,所以我只制作了几个文件来将代码拆分成几个文件

我将一些代码放在名为
pixel.lisp
的文件中,一些放在
gameview.lisp
中,主循环在
pixelworld.lisp

我的asd文件如下所示:

;;;; pixelworld.asd

(asdf:defsystem #:pixelworld
  :description "Describe pixelworld here"
  :author "Your Name <your.name@example.com>"
  :license  "Specify license here"
  :version "0.0.1"
  :serial t
  :depends-on (:sdl2 :cl-opengl)
  :components ((:file "package")
           (:file "pixel")
           (:file "gameview")
           (:file "pixelworld")))
;;;;pixelworld.asd
(asdf:defsystem#:像素世界
:description“在此处描述像素世界”
:作者“你的名字”
:license“在此处指定许可证”
:版本“0.0.1”
:序列号t
:取决于(:sdl2:cl opengl)
:组件(:文件“包”)
(:文件“像素”)
(:文件“gameview”)
(:文件“pixelworld”))

如果我理解正确,这个文件应该告诉
quickproject
当我
ql:quickload
它时如何编译我的系统。因为
:serial
t
,所以它应该按顺序编译。如果我手工从上到下编译和评估每个文件,这不会有任何问题,所以依赖项不会有问题。但是当我
ql:quickload
项目并进入带有
(在package:pixelworld中)
的包时,我无法运行main函数,因为我系统中的其他表达式没有计算。关于这一点,是否有一些基本的东西我不了解,或者是否有另一个命令我必须与quicklisp一起使用才能得到我想要的东西?提前感谢。:)

就像评论中提到的特拉维斯·桑德兰和tfg一样,在每个文件的顶部都有(在包中:pixelworld)是很重要的。更改后,它工作正常。

您的asd文件看起来很好,您的所有文件顶部是否都有(软件包:pixelworld)?哪个文件是主定义文件?您可以定义宏中使用的函数,然后以以下形式使用该宏(都在同一文件中)。通过单独评估每个表单,一切正常。但编译器在代码展开时无法访问宏使用的辅助函数(尚未定义,仅声明)。因此,请注意编译过程中的警告和错误,可以通过调用(asdf:compile system:pixelworld)或在调用ql:quickload时使用:vervose t;如果您将错误信息添加到此问题中,我们可能可以帮助您更多我同意@travissanderland:您很可能在程序包表单中缺少
。这将导致无论
*包*
在您所说的
(加载…
(编译文件…
)点上是什么,这就是加载/编译文件中的内容。我希望,QL/ASDF会将其重新绑定到
CL-USER
,以使事情可重复,但这意味着不同的事情会发生在你身上。非常感谢,在每个文件中添加(在package:pixelworld中)做到了这一点。多亏了@tfb,我现在知道了原因。你们当中有人知道如果我用这种方式创建子文件夹并构造代码,我该怎么做吗?我必须使用模块吗?还是这些东西完全不同?@Echon:我想这是另一个问题。如果我这样做的话,我会使用模块。