Don't put .asd files in ~/quicklisp/quicklisp/
. Use ~/quicklisp/local-projects/
instead.
The syntax for your start
defun is wrong. It needs a lambda list.
Common Lisp is often used by starting the environment, loading the application, and then interactively calling functions defined by your application. The load process compiles the source code to machine code and the functions you call interactively are compiled functions.
When I want to make a binary file I can run from the command line, I use buildapp. In your case, you could do something like this:
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
In this scheme, you would have to modify app::start
to accept one argument, a list containing all the command line argument strings passed to game
.
In general, most Common Lisps have some way to produce a binary program to run independently of the normal runtime. The terminology varies, but it's often called "delivery". If you use a different Common Lisp in the future, you may get more information if you search the documentation for information about delivery.