Вопрос

I am having trouble using the asdf build tools with common lisp. Here is my fractals.asd file:

(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")))

Both the ffiles fract-tree.lisp and fractal-lab.lisp have the statement (in-package :fractals) at the very beginning of the file. However, I am automatically getting an error saying The name "CL-OPENGL" does not designate any package. I don't understand why this is wrong. Furthermore, if I don't include these libraries, then I have to manually require them myself... I created a directory called: ~/.config/common-lisp/source-registry.conf.d/ where I placed a file called fractals2.conf which contains the following:

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

This is the directory of my fractals.asd file as shown above. Apparently, this is supposed to tell asdf where my user-defined systems are located. I followed this tutorial.

  • In summary, how can I get asdf to find my user-defined systems so that I do not have to manually load them?

Thanks for all the help!

Это было полезно?

Решение

You need to declare your dependencies in the defsystem with a :depends-on clause. The :use clause of the defpackage only makes names of already loaded packages available, but won't load them.

BTW, your .asd file should not include the defpackage of the main package. While it makes sense to declare a special package to run the defsystems in there, regular packages should be declared in .lisp files.

EDIT: This may also solve your second problem. If not, it's probably because ASDF doesn't automatically expand the ~ character in paths. In that case, replace it with the actual path of your home directory.

Другие советы

1- Looks like you were using the undefined fractals:defsystem instead of asdf:defsystem

2- the ASDF DSL accepts the directive (:directory (:home "lisp_proj/fractals_2"))

3- Starting with 3.1.2, you can put everything under ~/common-lisp/

4- For God's Sake, RTFM!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top