Next: , Previous: Running gnatmake, Up: The GNAT Make Program gnatmake


6.2 Switches for gnatmake

You may specify any of the following switches to gnatmake:

--GCC=compiler_name
Program used for compiling. The default is `gcc'. You need to use quotes around compiler_name if compiler_name contains spaces or other separator characters. As an example --GCC="foo -x -y" will instruct gnatmake to use foo -x -y as your compiler. Note that switch -c is always inserted after your command name. Thus in the above example the compiler command that will be used by gnatmake will be foo -c -x -y. If several --GCC=compiler_name are used, only the last compiler_name is taken into account. However, all the additional switches are also taken into account. Thus, --GCC="foo -x -y" --GCC="bar -z -t" is equivalent to --GCC="bar -x -y -z -t".
--GNATBIND=binder_name
Program used for binding. The default is `gnatbind'. You need to use quotes around binder_name if binder_name contains spaces or other separator characters. As an example --GNATBIND="bar -x -y" will instruct gnatmake to use bar -x -y as your binder. Binder switches that are normally appended by gnatmake to `gnatbind' are now appended to the end of bar -x -y.
--GNATLINK=linker_name
Program used for linking. The default is `gnatlink'. You need to use quotes around linker_name if linker_name contains spaces or other separator characters. As an example --GNATLINK="lan -x -y" will instruct gnatmake to use lan -x -y as your linker. Linker switches that are normally appended by gnatmake to `gnatlink' are now appended to the end of lan -x -y.
-a
Consider all files in the make process, even the GNAT internal system files (for example, the predefined Ada library files), as well as any locked files. Locked files are files whose ALI file is write-protected. By default, gnatmake does not check these files, because the assumption is that the GNAT internal files are properly up to date, and also that any write protected ALI files have been properly installed. Note that if there is an installation problem, such that one of these files is not up to date, it will be properly caught by the binder. You may have to specify this switch if you are working on GNAT itself. -a is also useful in conjunction with -f if you need to recompile an entire application, including run-time files, using special configuration pragma settings, such as a non-standard Float_Representation pragma. By default gnatmake -a compiles all GNAT internal files with gcc -c -gnatpg rather than gcc -c.
-b
Bind only. Can be combined with -c to do compilation and binding, but no link. Can be combined with -l to do binding and linking. When not combined with -c all the units in the closure of the main program must have been previously compiled and must be up to date. The root unit specified by file_name may be given without extension, with the source extension or, if no GNAT Project File is specified, with the ALI file extension.
-c
Compile only. Do not perform binding, except when -b is also specified. Do not perform linking, except if both -b and -l are also specified. If the root unit specified by file_name is not a main unit, this is the default. Otherwise gnatmake will attempt binding and linking unless all objects are up to date and the executable is more recent than the objects.
-C
Use a mapping file. A mapping file is a way to communicate to the compiler two mappings: from unit names to file names (without any directory information) and from file names to path names (with full directory information). These mappings are used by the compiler to short-circuit the path search. When gnatmake is invoked with this switch, it will create a mapping file, initially populated by the project manager, if -P is used, otherwise initially empty. Each invocation of the compiler will add the newly accessed sources to the mapping file. This will improve the source search during the next invocation of the compiler.
-f
Force recompilations. Recompile all sources, even though some object files may be up to date, but don't recompile predefined or GNAT internal files or locked files (files with a write-protected ALI file), unless the -a switch is also specified.

-i
In normal mode, gnatmake compiles all object files and ALI files into the current directory. If the -i switch is used, then instead object files and ALI files that already exist are overwritten in place. This means that once a large project is organized into separate directories in the desired manner, then gnatmake will automatically maintain and update this organization. If no ALI files are found on the Ada object path (Search Paths and the Run-Time Library (RTL)), the new object and ALI files are created in the directory containing the source being compiled. If another organization is desired, where objects and sources are kept in different directories, a useful technique is to create dummy ALI files in the desired directories. When detecting such a dummy file, gnatmake will be forced to recompile the corresponding source file, and it will be put the resulting object and ALI files in the directory where it found the dummy file.
-jn
Use n processes to carry out the (re)compilations. On a multiprocessor machine compilations will occur in parallel. In the event of compilation errors, messages from various compilations might get interspersed (but gnatmake will give you the full ordered list of failing compiles at the end). If this is problematic, rerun the make process with n set to 1 to get a clean list of messages.
-k
Keep going. Continue as much as possible after a compilation error. To ease the programmer's task in case of compilation errors, the list of sources for which the compile fails is given when gnatmake terminates.

If gnatmake is invoked with several file_names and with this switch, if there are compilation errors when building an executable, gnatmake will not attempt to build the following executables.

-l
Link only. Can be combined with -b to binding and linking. Linking will not be performed if combined with -c but not with -b. When not combined with -b all the units in the closure of the main program must have been previously compiled and must be up to date, and the main program need to have been bound. The root unit specified by file_name may be given without extension, with the source extension or, if no GNAT Project File is specified, with the ALI file extension.
-m
Specifies that the minimum necessary amount of recompilations be performed. In this mode gnatmake ignores time stamp differences when the only modifications to a source file consist in adding/removing comments, empty lines, spaces or tabs. This means that if you have changed the comments in a source file or have simply reformatted it, using this switch will tell gnatmake not to recompile files that depend on it (provided other sources on which these files depend have undergone no semantic modifications). Note that the debugging information may be out of date with respect to the sources if the -m switch causes a compilation to be switched, so the use of this switch represents a trade-off between compilation time and accurate debugging information.
-M
Check if all objects are up to date. If they are, output the object dependences to stdout in a form that can be directly exploited in a Makefile. By default, each source file is prefixed with its (relative or absolute) directory name. This name is whatever you specified in the various -aI and -I switches. If you use gnatmake -M -q (see below), only the source file names, without relative paths, are output. If you just specify the -M switch, dependencies of the GNAT internal system files are omitted. This is typically what you want. If you also specify the -a switch, dependencies of the GNAT internal files are also listed. Note that dependencies of the objects in external Ada libraries (see switch -aLdir in the following list) are never reported.
-n
Don't compile, bind, or link. Checks if all objects are up to date. If they are not, the full name of the first file that needs to be recompiled is printed. Repeated use of this option, followed by compiling the indicated source file, will eventually result in recompiling all required units.
-o exec_name
Output executable name. The name of the final executable program will be exec_name. If the -o switch is omitted the default name for the executable will be the name of the input file in appropriate form for an executable file on the host system.

This switch cannot be used when invoking gnatmake with several file_names.

-q
Quiet. When this flag is not set, the commands carried out by gnatmake are displayed.
-s
Recompile if compiler switches have changed since last compilation. All compiler switches but -I and -o are taken into account in the following way: orders between different “first letter” switches are ignored, but orders between same switches are taken into account. For example, -O -O2 is different than -O2 -O, but -g -O is equivalent to -O -g.
-u
Unique. Recompile at most the main file. It implies -c. Combined with -f, it is equivalent to calling the compiler directly.
-v
Verbose. Displays the reason for all recompilations gnatmake decides are necessary.
-z
No main subprogram. Bind and link the program even if the unit name given on the command line is a package name. The resulting executable will execute the elaboration routines of the package and its closure, then the finalization routines.
gcc switches
The switch -g or any uppercase switch (other than -A, -L or -S) or any switch that is more than one character is passed to gcc (e.g. -O, -gnato, etc.)

Source and library search path switches:

-aIdir
When looking for source files also look in directory dir. The order in which source files search is undertaken is described in Search Paths and the Run-Time Library (RTL).
-aLdir
Consider dir as being an externally provided Ada library. Instructs gnatmake to skip compilation units whose .ali files have been located in directory dir. This allows you to have missing bodies for the units in dir and to ignore out of date bodies for the same units. You still need to specify the location of the specs for these units by using the switches -aIdir or -Idir. Note: this switch is provided for compatibility with previous versions of gnatmake. The easier method of causing standard libraries to be excluded from consideration is to write-protect the corresponding ALI files.
-aOdir
When searching for library and object files, look in directory dir. The order in which library files are searched is described in Search Paths for gnatbind.
-Adir
Equivalent to -aLdir -aIdir.
-Idir
Equivalent to -aOdir -aIdir.
-I-
Do not look for source files in the directory containing the source file named in the command line. Do not look for ALI or object files in the directory where gnatmake was invoked.
-Ldir
Add directory dir to the list of directories in which the linker will search for libraries. This is equivalent to -largs -Ldir.
-nostdinc
Do not look for source files in the system default directory.
-nostdlib
Do not look for library files in the system default directory.
--RTS=rts-path
Specifies the default location of the runtime library. We look for the runtime in the following directories, and stop as soon as a valid runtime is found ("adainclude" or "ada_source_path", and "adalib" or "ada_object_path" present):

The selected path is handled like a normal RTS path.