This is a template for a command line application written in Common
Lisp. It can be build into the binary with a single make command if
you already have Roswell and Qlot installed.
Also, this template uses defmain as a command line arguments parser. And cl-info for collecting information about Lisp environment in case if your user need to report information.
Here is how it looks like:
[...s/lisp/makefile-template]% make
qlot install
Installing Quicklisp to /Users/art/projects/lisp/makefile-template/quicklisp/ ...
; Fetching #<URL "http://beta.quicklisp.org/quicklisp.lisp">
; 55.80KB
Reading '/Users/art/projects/lisp/makefile-template/qlfile'...
; Fetching #<URL "http://beta.quicklisp.org/dist/quicklisp.txt">
; 0.40KB
==================================================
408 bytes in 0.00 seconds (928.76KB/sec)
Already have dist "quicklisp" version "2018-04-30".
Installing dist "defmain".
Installing dist "cl-info".
Successfully installed.
qlot exec ros -L sbcl-bin build app.ros
*******************************************************************
* WARNING: the CC environment variable is not set. *
* Clon will be loaded without support for terminal autodetection. *
* See sections 2 and A.1 of the user manual for more information. *
*******************************************************************compressed 0 bytes into 8 at level -1
compressed 32768 bytes into 399 at level -1
compressed 34275328 bytes into 7490420 at level -1
compressed 2162688 bytes into 574214 at level -1
compressed 13303808 bytes into 4028984 at level -1
[...s/lisp/makefile-template]% ./app --version
Version: 0.1.0
[...s/lisp/makefile-template]% ./app --version --verbose
Version: 0.1.0
OS: Darwin 15.6.0
Lisp: SBCL 1.4.3
ASDF: 3.3.1.1
QL: cl-info github-c2e0d055549e1649861163a4cdcb6dd67137f114
defmain github-d335d24faf96e131d05991a6f401bd9b44e1c512
quicklisp 2018-04-30Makefile was does following things:
- It creates a local
quicklispdirectory. - Installs all dists mentioned in the
qlfile. - Builds binaries for all
*.rosscripts in the directory.
Qlot is pinning dists version, so after update to qlfile file you
need to execute make lock to pin dependencies in the
qlfile.lock.
By default, Makefile uses SBCL to build a binary. But you may choose any Lisp, supported by Roswell. Just set the LISP environment variable:
make clean
make LISP=ccl-binTo check which Lisp are supported, run:
ros list versionsThis script was inspired by this reddit post by zodmaner.