asdf建设和Common Lisp

时间:2014-05-10 21:16:07

标签: common-lisp asdf

我在使用普通lisp的asdf构建工具时遇到问题。这是我的fractals.asd文件:

(defpackage :fractals
  (:use :cl :asdf :cl-opengl :cl-glu :cl-glut)
  (:export :frac-tree :draw-tree))
(in-package :fractals)
;----------------------------------------------------------
(defsystem fractals 
  :name "fractals"
  :version "0.0.0"
  :serial t
  :components ((:file "frac-tree")
           (:file "fractal-lab")))

ffiles fract-tree.lispfractal-lab.lisp在文件的最开头都有语句(in-package :fractals)。但是,我自动收到错误消息The name "CL-OPENGL" does not designate any package.我不明白为什么这是错误的。此外,如果我不包含这些库,那么我必须自己手动要求它们...我创建了一个名为~/.config/common-lisp/source-registry.conf.d/的目录,其中我放置了一个名为fractals2.conf的文件,其中包含以下内容: :

(:directory "~/lisp_proj/fractals2/")

这是我fractals.asd文件的目录,如上所示。显然,这应该告诉asdf我的用户定义的系统所在的位置。我按照this教程。

  • 总之,如何让asdf找到我的用户定义系统,以便我不必手动加载它们?

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

您需要使用defsystem子句在:depends-on中声明您的依赖项。 :use的{​​{1}}子句仅使已加载的包的名称可用,但不会加载它们。

顺便说一句,您的defpackage文件不应包含主程序包的.asd。虽然声明一个特殊包来运行defpackage是有意义的,但应该在defsystem个文件中声明常规包。

编辑:这也可以解决您的第二个问题。如果不是,可能是因为ASDF不会自动扩展路径中的.lisp字符。在这种情况下,请将其替换为主目录的实际路径。

答案 1 :(得分:0)

1-看起来你使用的是未定义的分形:defsystem而不是asdf:defsystem

2- ASDF DSL接受指令(:directory(:home“lisp_proj / fractals_2”))

3-从3.1.2开始,您可以将所有内容放在〜/ common-lisp /

4-为了上帝的缘故,RTFM!