Next: , Previous: Compiling Programs, Up: Compiling Using gcc


3.2 Switches for gcc

The gcc command accepts switches that control the compilation process. These switches are fully described in this section. First we briefly list all the switches, in alphabetical order, then we describe the switches in more detail in functionally grouped sections.

-b target
Compile your program to run on target, which is the name of a system configuration. You must have a GNAT cross-compiler built if target is not the same as your host system.
-Bdir
Load compiler executables (for example, gnat1, the Ada compiler) from dir instead of the default location. Only use this switch when multiple versions of the GNAT compiler are available. See the gcc manual page for further details. You would normally use the -b or -V switch instead.
-c
Compile. Always use this switch when compiling Ada programs.

Note: for some other languages when using gcc, notably in the case of C and C++, it is possible to use use gcc without a -c switch to compile and link in one step. In the case of GNAT, you cannot use this approach, because the binder must be run and gcc cannot be used to run the GNAT binder.

-g
Generate debugging information. This information is stored in the object file and copied from there to the final executable file by the linker, where it can be read by the debugger. You must use the -g switch if you plan on using the debugger.
-Idir
Direct GNAT to search the dir directory for source files needed by the current compilation (see Search Paths and the Run-Time Library (RTL)).
-I-
Except for the source file named in the command line, do not look for source files in the directory containing the source file named in the command line (see Search Paths and the Run-Time Library (RTL)).
-o file
This switch is used in gcc to redirect the generated object file and its associated ALI file. Beware of this switch with GNAT, because it may cause the object file and ALI file to have different names which in turn may confuse the binder and the linker.
-O[n]
n controls the optimization level.
n = 0
No optimization, the default setting if no -O appears
n = 1
Normal optimization, the default if you specify -O without an operand.
n = 2
Extensive optimization
n = 3
Extensive optimization with automatic inlining. This applies only to inlining within a unit. For details on control of inter-unit inlining see See Subprogram Inlining Control.

--RTS=rts-path
Specifies the default location of the runtime library. Same meaning as the equivalent gnatmake flag (see Switches for gnatmake).
-S
Used in place of -c to cause the assembler source file to be generated, using .s as the extension, instead of the object file. This may be useful if you need to examine the generated assembly code.
-v
Show commands generated by the gcc driver. Normally used only for debugging purposes or if you need to be sure what version of the compiler you are executing.
-V ver
Execute ver version of the compiler. This is the gcc version, not the GNAT version.
-gnata
Assertions enabled. Pragma Assert and pragma Debug to be activated.
-gnatA
Avoid processing gnat.adc. If a gnat.adc file is present, it will be ignored.
-gnatb
Generate brief messages to stderr even if verbose mode set.
-gnatc
Check syntax and semantics only (no code generation attempted).
-gnatC
Compress debug information and external symbol name table entries.
-gnatD
Output expanded source files for source level debugging. This switch also suppress generation of cross-reference information (see -gnatx).
-gnatecpath
Specify a configuration pragma file. (see The Configuration Pragmas Files)
-gnatempath
Specify a mapping file. (see Units to Sources Mapping Files)
-gnatE
Full dynamic elaboration checks.
-gnatf
Full errors. Multiple errors per line, all undefined references.
-gnatF
Externals names are folded to all uppercase.
-gnatg
Internal GNAT implementation mode. This should not be used for applications programs, it is intended only for use by the compiler and its run-time library. For documentation, see the GNAT sources.
-gnatG
List generated expanded code in source form.
-gnatic
Identifier character set (c=1/2/3/4/8/9/p/f/n/w).
-gnath
Output usage information. The output is written to stdout.
-gnatkn
Limit file names to n (1-999) characters (k = krunch).
-gnatl
Output full source listing with embedded error messages.
-gnatmn
Limit number of detected errors to n (1-999).
-gnatn
Activate inlining across unit boundaries for subprograms for which pragma inline is specified.
-gnatN
Activate front end inlining.
-fno-inline
Suppresses all inlining, even if other optimization or inlining switches are set.
-fstack-check
Activates stack checking. See separate section on stack checking for details of the use of this option.
-gnato
Enable numeric overflow checking (which is not normally enabled by default). Not that division by zero is a separate check that is not controlled by this switch (division by zero checking is on by default).
-gnatp
Suppress all checks.
-gnatq
Don't quit; try semantics, even if parse errors.
-gnatQ
Don't quit; generate ali and tree files even if illegalities.
-gnatP
Enable polling. This is required on some systems (notably Windows NT) to obtain asynchronous abort and asynchronous transfer of control capability. See the description of pragma Polling in the GNAT Reference Manual for full details.
-gnatR[0/1/2/3][s]
Output representation information for declared types and objects.
-gnats
Syntax check only.
-gnatt
Tree output file to be generated.
-gnatT nnn
Set time slice to specified number of microseconds
-gnatu
List units for this compilation.
-gnatU
Tag all error messages with the unique string "error:"
-gnatv
Verbose mode. Full error output with source lines to stdout.
-gnatV
Control level of validity checking. See separate section describing this feature.
-gnatwxxxxxx
Warning mode where xxx is a string of options describing the exact warnings that are enabled or disabled. See separate section on warning control.
-gnatWe
Wide character encoding method (e=n/h/u/s/e/8).
-gnatx
Suppress generation of cross-reference information.
-gnaty
Enable built-in style checks. See separate section describing this feature.
-gnatzm
Distribution stub generation and compilation (m=r/c for receiver/caller stubs).
-gnat83
Enforce Ada 83 restrictions.
-pass-exit-codes
Catch exit codes from the compiler and use the most meaningful as exit status.

You may combine a sequence of GNAT switches into a single switch. For example, the combined switch

     -gnatofi3

is equivalent to specifying the following sequence of switches:

     -gnato -gnatf -gnati3

The following restrictions apply to the combination of switches in this manner: