Table of Contents
GHC's behaviour is controlled by options, which for historical reasons are also sometimes referred to as command-line flags or arguments. Options can be specified in three ways:
An invocation of GHC takes the following form:
ghc [argument...]
command-line arguments are either options or file names.
command-line options begin with -
.
They may not be grouped:
-vO
is different from -v -O
.
Options need not precede filenames: e.g., ghc *.o -o
foo
. All options are processed and then applied to
all files; you cannot, for example, invoke ghc -c -O1
Foo.hs -O2 Bar.hs
to apply different optimisation
levels to the files Foo.hs
and
Bar.hs
.
Sometimes it is useful to make the connection between a
source file and the command-line options it requires quite
tight. For instance, if a Haskell source file uses GHC
extensions, it will always need to be compiled with the
-fglasgow-exts
option. Rather than maintaining
the list of per-file options in a Makefile
,
it is possible to do this directly in the source file using the
OPTIONS_GHC
pragma :
{-# OPTIONS_GHC -fglasgow-exts #-} module X where ...
OPTIONS_GHC
pragmas are only looked for at
the top of your source files, upto the first
(non-literate,non-empty) line not containing
OPTIONS_GHC
. Multiple OPTIONS_GHC
pragmas are recognised. Do not put comments before, or on the same line
as, the OPTIONS_GHC
pragma.
Note that your command shell does not
get to the source file options, they are just included literally
in the array of command-line arguments the compiler
maintains internally, so you'll be desperately disappointed if
you try to glob etc. inside OPTIONS_GHC
.
NOTE: the contents of OPTIONS_GHC are prepended to the command-line options, so you do have the ability to override OPTIONS_GHC settings via the command line.
It is not recommended to move all the contents of your
Makefiles into your source files, but in some circumstances, the
OPTIONS_GHC
pragma is the Right Thing. (If you
use -keep-hc-file-too
and have OPTION flags in
your module, the OPTIONS_GHC will get put into the generated .hc
file).
Options may also be modified from within GHCi, using the
:set
command. See Section 3.7, “The :set
command”
for more details.