I have the following directory structure:
my-project/
├── my-project.asd
├── package.lisp # defpackage.
├── utils.lisp # Functions used by main.lisp.
└── main.lisp # Main program.
my-project.asd:
(defsystem "my-project"
:components ((:file "package")
(:file "utils")
(:file "main")))
package.lisp:
(defpackage :com.example
(:use :cl))
utils.lisp:
(in-package :com.example)
(defun double (x)
(* x 2))
main.lisp:
(in-package :com.example)
(format t "~a" (double 3))
The problem is: how do I compile and run main.lisp using ASDF?
I was able to compile and run the program by:
$ mv my-project ~/common-lisp/.
$ sbcl
* (require :asdf)
* (asdf:load-system :my-project)
However, this is incredibly silly. I do not want to move my project into ~/common-lisp/ just to run it. I want to compile and run the program right from the project directory itself. The my-project/ directory could be anywhere, and I want it to be possible to be placed anywhere. In other words, I would like to load the system from the current directory.
Think of make, where I can compile files right from the directory of the Makefile itself. How do I similarly compile and run a Common Lisp program from the directory of the *.asd file itself?
(I am using SBCL version 1.4.5 and ASDF version 3.3.1)