Without --make, GHC will compile one or more source files given on the command line.
The first phase to run is determined by each input-file suffix, and the last phase is determined by a flag. If no relevant flag is present, then go all the way through linking. This table summarises:
Phase of the compilation system | Suffix saying “start here” | Flag saying “stop after” | (suffix of) output file |
---|---|---|---|
literate pre-processor | .lhs | - | .hs |
C pre-processor (opt.) | .hs (with -cpp) | -E | .hspp |
Haskell compiler | .hs | -C, -S | .hc, .s |
C compiler (opt.) | .hc or .c | -S | .s |
assembler | .s | -c | .o |
linker | other | - | a.out |
Thus, a common invocation would be: ghc -c Foo.hs
Note: What the Haskell compiler proper produces depends on whether a native-code generator is used (producing assembly language) or not (producing C). See Section 4.12.5 for more details.
Note: C pre-processing is optional, the -ccpflag turns it on. See Section 4.12.3 for more details.
Note: The option -E runs just the pre-processing passes of the compiler, dumping the result in a file. Note that this differs from the previous behaviour of dumping the file to standard output.