This section is a quick-reference for GHC's command-line flags. For each flag, we also list its static/dynamic status (see Section 4.2), and the flag's opposite (if available).
Flag | Description | Static/Dynamic | Reverse |
---|---|---|---|
-? | help | static | - |
-help | help | static | - |
-v | verbose mode (equivalent to -v3) | dynamic | - |
-vn | set verbosity level | dynamic | - |
--version | display GHC version | static | - |
--numeric-version | display GHC version (numeric only) | static | - |
Flag | Description | Static/Dynamic | Reverse |
---|---|---|---|
-E | Stop after preprocessing (.hspp file) | static | - |
-C | Stop after generating C (.hc file) | static | - |
-S | Stop after generating assembly (.s file) | static | - |
-c | Stop after compiling to object code (.o file) | static | - |
Flag | Description | Static/Dynamic | Reverse |
---|---|---|---|
-hisuf suffix | set the suffix to use for interface files | static | - |
-o filename | set output filename | static | - |
-odir dir | set output directory | static | - |
-ohi filename | set the filename in which to put the interface | static | |
-osuf suffix | set the output file suffix | static | - |
Flag | Description | Static/Dynamic | Reverse |
---|---|---|---|
-keep-hc-file | retain intermediate .hc files | static | - |
-keep-s-file | retain intermediate .s files | static | - |
-keep-raw-s-file | retain intermediate .raw_s files | static | - |
-keep-tmp-files | retain all intermediate temporary files | static | - |
Flag | Description | Static/Dynamic | Reverse |
---|---|---|---|
-tmpdir | set the directory for temporary files | static | - |
Flag | Description | Static/Dynamic | Reverse |
---|---|---|---|
-idir1:dir2:... | add dir, dir2, etc. to import path | static | - |
-i | Empty the import directory list | static | - |
Flag | Description | Static/Dynamic | Reverse |
---|---|---|---|
-ohi file | Put the interface file in file | static | - |
-ddump-hi | Dump the new interface to stdout | dynamic | - |
-ddump-hi-diffs | Show the differences vs. the old interface | dynamic | - |
Flag | Description | Static/Dynamic | Reverse |
---|---|---|---|
-no-recomp | Turn off recompilation checking | static | -recomp |
Flag | Description | Static/Dynamic | Reverse |
---|---|---|---|
--add-package | Install a new package | static | - |
--delete-package name | Delete package entry name | static | - |
--list-packages | List installed packages | static | - |
-package name | Use package name | static | - |
-package-name name | Compile code for package name | static | - |
Flag | Description | Static/Dynamic | Reverse |
---|---|---|---|
-fallow-overlapping-instances | dynamic | -fno-allow-overlapping-instances | |
-fallow-undecidable-instances | Enable undecidable instances | dynamic | -fno-allow-undecidable-instances |
-fgenerics | Enable generics | dynamic | -fno-fgenerics |
-fglasgow-exts | Enable most language extensions | dynamic | -fno-glasgow-exts |
-fignore-asserts | Ignore assertions | dynamic | -fno-ignore-asserts |
-fno-implicit-prelude | Don't implicitly import Prelude | dynamic | - |
-fno-monomorphism-restriction | Disable the monomorphism restriction | dynamic | - |
-firrefutable-tuples | Make tuple pattern matching irrefutable | dynamic | -fno-irrefutable-tuples |
-fcontext-stackn | set the limit for context reduction | dynamic | - |
Flag | Description | Static/Dynamic | Reverse |
---|---|---|---|
-W | enable normal warnings | dynamic | -w |
-w | disable all warnings | dynamic | - |
-Wall | enable all warnings | dynamic | -w |
-fwarn-deprecations | warn about uses of functions & types that are deprecated | dynamic | -fno-warn-deprecations |
-fwarn-duplicate-exports | warn when an entity is exported multiple times | dynamic | -fno-warn-duplicate-exports |
-fwarn-hi-shadowing | warn when a .hi file in the current directory shadows a library | dynamic | -fno-warn-hi-shadowing |
-fwarn-incomplete-patterns | warn when a pattern match could fail | dynamic | -fno-warn-incomplete-patterns |
-fwarn-missing-fields | warn when fields of a record are uninitialised | dynamic | -fno-warn-missing-fields |
-fwarn-missing-methods | warn when class methods are undefined | dynamic | -fno-warn-missing-methods |
-fwarn-missing-signatures | warn about top-level functions without signatures | dynamic | -fno-warn-missing-signatures |
-fwarn-name-shadowing | warn when names are shadowed | dynamic | -fno-warn-name-shadowing |
-fwarn-overlapping-patterns | warn about overlapping patterns | dynamic | -fno-warn-overlapping-patterns |
-fwarn-simple-patterns | warn about lambda-patterns that can fail | dynamic | -fno-warn-simple-patterns |
-fwarn-type-defaults | warn when defaulting happens | dynamic | -fno-warn-type-defaults |
-fwarn-unused-binds | warn about bindings that are unused | dynamic | -fno-warn-unused-binds |
-fwarn-unused-imports | warn about unnecessary imports | dynamic | -fno-warn-unused-imports |
-fwarn-unused-matches | warn about variables in patterns that aren't used | dynamic | -fno-warn-unused-matches |
Flag | Description | Static/Dynamic | Reverse |
---|---|---|---|
-O | Enable default optimisation (level 1) | static | -O0 |
-On | Set optimisation level n | static | -O0 |
-O2-for-C | Run gcc with -O2 | static | - |
Flag | Description | Static/Dynamic | Reverse |
---|---|---|---|
-fall-strict | Make everything strict | dynamic | -fno-all-strict |
-fcase-merge | Enable case-merging | static | -fno-case-merge |
-fdicts-strict | Make dictionaries strict | dynamic | -fno-dicts-strict |
-fdo-eta-reduction | Enable eta-reduction | static | -fno-do-eta-reduction |
-fdo-lambda-eta-expansion | Enable lambda eta-reduction | static | -fno-do-lambda-eta-expansion |
-fexcess-precision | Enable excess intermediate precision | static | -fno-excess-precision |
-ffoldr-build-on | Enable foldr-build optimisation | static | -fno-foldr-build-on |
-fignore-asserts | Ignore assertions in the source | static | -fno-ignore-asserts |
-fignore-interface-pragmas | Ignore pragmas in interface files | static | -fno-ignore-interface-pragmas |
-flet-no-escape | Enable let-no-escape optimisation | static | -fno-let-no-escape |
-fliberate-case-threshold | Tweak the liberate-case optimisation | static | -fno-liberate-case-threshold |
-fomit-interface-pragmas | Don't generate interface pragmas | static | -fno-omit-interface-pragmas |
-fmax-simplifier-iterations | Set the max iterations for the simplifier | static | - |
-fno-cpr | Turn off CPR analysis | static | - |
-fno-cse | Turn off common sub-expression | static | - |
-fno-pre-inlining | Turn off pre-inlining | static | - |
-fno-strictness | Turn off strictness analysis | static | - |
-fnumbers-strict | Make numbers strict | dynamic | -fno-numbers-strict |
-funbox-strict-fields | Flatten strict constructor fields | static | -fno-unbox-strict-fields |
-funfolding-creation-threshold | Tweak unfolding settings | static | -fno-unfolding-creation-threshold |
-funfolding-fun-discount | Tweak unfolding settings | static | -fno-unfolding-fun-discount |
-funfolding-keeness-factor | Tweak unfolding settings | static | -fno-unfolding-keeness-factor |
-funfolding-update-in-place | Tweak unfolding settings | static | -fno-unfolding-update-in-place |
-funfolding-use-threshold | Tweak unfolding settings | static | -fno-unfolding-use-threshold |
-fusagesp | Turn on UsageSP analysis | static | -fno-usagesp |
Flag | Description | Static/Dynamic | Reverse |
---|---|---|---|
-auto | Auto-add _scc_s to all exported functions | static | -no-auto |
-auto-all | Auto-add _scc_s to all top-level functions | static | -no-auto-all |
-auto-dicts | Auto-add _scc_s to all dictionaries | static | -no-auto-dicts |
-caf-all | Auto-add _scc_s to all CAFs | static | -no-caf-all |
-prof | Turn on profiling | static | - |
-ticky | Turn on ticky-ticky profiling | static | - |
Flag | Description | Static/Dynamic | Reverse |
---|---|---|---|
-gransim | Enable GRANSIM | static | - |
-parallel | Enable Parallel Haskell | static | - |
-smp | Enable SMP support | static | - |
Flag | Description | Static/Dynamic | Reverse |
---|---|---|---|
-cpp | Run the C pre-processor on Haskell source files | dynamic | - |
-Dsymbol[=value] | Define a symbol in the C pre-processor | dynamic | -Usymbol |
-Usymbol | Undefine a symbol in the C pre-processor | dynamic | - |
-Idir | Add dir to the directory search list for #include files | static | - |
Flag | Description | Static/Dynamic | Reverse |
---|---|---|---|
-#include file | Include file when compiling the .hc file | dynamic | - |
Flag | Description | Static/Dynamic | Reverse |
---|---|---|---|
-fasm | Use the native code generator | dynamic | -fvia-C |
-fvia-C | Compile via C | dynamic | -fasm |
Flag | Description | Static/Dynamic | Reverse |
---|---|---|---|
-dynamic | Use dynamic Haskell libraries (if available) | static | - |
-llib | Link in library lib | static | - |
-Ldir | Add dir to the list of directories searched for libraries | static | - |
-package name | Link in package name | static | - |
-split-objs | Split objects (for libraries) | static | - |
-static | Use static Haskell libraries | static | - |
-no-hs-main | Don't asssume this program contains main | static | - |
Flag | Description | Static/Dynamic | Reverse |
---|---|---|---|
-pgmL cmd | Use cmd as the literate pre-processor | static | - |
-pgmP cmd | Use cmd as the C pre-processor (with -cpp only) | static | - |
-pgmc cmd | Use cmd as the C compiler | static | - |
-pgma cmd | Use cmd as the assembler | static | - |
-pgml cmd | Use cmd as the linker | static | - |
-pgmdll cmd | Use cmd as the DLL generator | static | - |
-pgmdep cmd | Use cmd as the dependency generator | static | - |
Flag | Description | Static/Dynamic | Reverse |
---|---|---|---|
-optL option | pass option to the literate pre-processor | dynamic | - |
-optP option | pass option to cpp (with -cpp only) | dynamic | - |
-optc option | pass option to the C compiler | dynamic | - |
-opta option | pass option to the assembler | dynamic | - |
-optl option | pass option to the linker | static | - |
-optdll option | pass option to the DLL generator | static | - |
-optdep option | pass option to the dependency generator | static | - |
Flag | Description | Static/Dynamic | Reverse |
---|---|---|---|
-mv8 | (SPARC only) enable version 8 support | static | - |
-monly-[32]-regs | (x86 only) give some registers back to the C compiler | dynamic | - |
Flag | Description | Static/Dynamic | Reverse |
---|---|---|---|
-dcore-lint | Turn on internal sanity checking | dynamic | - |
-ddump-absC | Dump abstract C | dynamic | - |
-ddump-asm | Dump assembly | dynamic | - |
-ddump-bcos | Dump interpreter byte code | dynamic | - |
-ddump-cpranal | Dump output from CPR analysis | dynamic | - |
-ddump-cse | Dump CSE output | dynamic | - |
-ddump-deriv | Dump deriving output | dynamic | - |
-ddump-ds | Dump desugarer output | dynamic | - |
-ddump-flatC | Dump “flat” C | dynamic | - |
-ddump-foreign | Dump foreign export stubs | dynamic | - |
-ddump-inlinings | Dump inlining info | dynamic | - |
-ddump-occur-anal | Dump occurrence analysis output | dynamic | - |
-ddump-parsed | Dump parse tree | dynamic | - |
-ddump-realC | Dump “real” C | dynamic | - |
-ddump-rn | Dump renamer output | dynamic | - |
-ddump-rules | Dump rules | dynamic | - |
-ddump-sat | Dump saturated output | dynamic | - |
-ddump-simpl | Dump final simplifier output | dynamic | - |
-ddump-simpl-iterations | Dump output from each simplifier iteration | dynamic | - |
-ddump-spec | Dump specialiser output | dynamic | - |
-ddump-stg | Dump final STG | dynamic | - |
-ddump-stranal | Dump strictness analyser output | dynamic | - |
-ddump-tc | Dump typechecker output | dynamic | - |
-ddump-types | Dump type signatures | dynamic | - |
-ddump-usagesp | Dump UsageSP analysis output | dynamic | - |
-ddump-worker-wrapper | Dump worker-wrapper output | dynamic | - |
-ddump-rn-trace | Trace renamer | dynamic | - |
-ddump-rn-stats | Renamer stats | dynamic | - |
-ddump-stix | Native code generator intermediate form | dynamic | - |
-ddump-simpl-stats | Dump simplifier stats | dynamic | - |
-dppr-debug | Turn on debug printing (more verbose) | static | - |
-dppr-noprags | Don't output pragma info in dumps | static | - |
-dppr-user-length | Set the depth for printing expressions in error msgs | static | - |
-dsource-stats | Dump haskell source stats | dynamic | - |
-dstg-lint | STG pass sanity checking | dynamic | - |
-dstg-stats | Dump STG stats | dynamic | - |
-dusagesp-lint | UsageSP sanity checker | dynamic | - |
-dverbose-core2core | Show output from each core-to-core pass | dynamic | - |
-dverbose-stg2stg | Show output from each STG-to-STG pass | dynamic | - |
-unreg | Enable unregisterised compilation | static | - |
Flag | Description | Static/Dynamic | Reverse |
---|---|---|---|
-funfold-casms-in-hi-file | Allow casms in unfoldings | static | - |
-femit-extern-decls | ??? | static | - |
-fglobalise-toplev-names | Make all top-level names global (for -split-objs) | static | - |
-fno-hi-version-check | Don't complain about .hi file mismatches | static | - |
-dno-black-holing | Turn off black holing (probably doesn't work) | static | - |
-fno-method-sharing | Don't share specialisations of overloaded functions | static | - |
-fno-prune-decls | Renamer: don't prune declarations | static | - |
-fno-prune-tydecls | Renamer: don't prune type declarations | static | - |
-fhistory-size | Set simplification history size | static | - |
-funregisterised | Unregisterised compilation (use -unreg instead) | static | - |
-fno-asm-mangling | Turn off assembly mangling (use -unreg instead) | static | - |