I was searching for a command line option parser that can handle git-style sub-commands and found a whole bunch of libraries. It appears as if libraries on this topic proliferate more than usual.
I evaluated them only to the point where I could decide to skip it or give it a cursory test. The information I gathered is summarised below.
If you only need the usual flag and option processing, i.e. not sub-commands,
then I would suggest unix-opts
. It appears to be the accepted standard and is
actively maintained. It is also suggested by both Awesome Common Lisp
and the State of the Common Lisp Ecosystem Survey 2020.
If your needs are very complex or specific you can investigate clon
,
utility-arguments
or ace.flag
.
For basic flags and options with sub-commands, there are a few libraries that explicitly support sub-command processing but you should be able to make it work with many of the other options and a bit of additional code.
Name | Print help | Native sub-commands | Notes |
---|---|---|---|
ace.flag | ? | ? | Not in QL. |
adopt | Yes | No | Can generate man files. |
apply-argv | No | No | Does not handle -xyz as three flags. |
cl-just-getopt-parser | No | No | Easy to use. |
cl-cli | Yes | Yes | |
cl-argparse | Yes | Yes | |
cli-parser | No | No | Does not handle free arguments, not in QL. |
clon | ? | Yes | Very complex, most feature rich. |
command-line-arguments | ? | ? | Not well documented. |
getopt | No | No | Does not handle -xyz as three flags, not well documented. |
parse-args | No | No | Not in QL |
utility-arguments | ? | ? | Complex to set up |
unix-options | Yes | No | Easy to use. |
unix-opts | Yes | No | The standard recommendation. |