A given object file clearly depends on the source file which is compiled to produce it. Here we are using depends in the sense of a typical make utility; in other words, an object file depends on a source file if changes to the source file require the object file to be recompiled. In addition to this basic dependency, a given object may depend on additional source files as follows:
If a file being compiled with's a unit X, the object file depends on the file containing the spec of unit X. This includes files that are with'ed implicitly either because they are parents of with'ed child units or they are run-time units required by the language constructs used in a particular unit.
If a file being compiled instantiates a library level generic unit, the object file depends on both the spec and body files for this generic unit.
If a file being compiled instantiates a generic unit defined within a package, the object file depends on the body file for the package as well as the spec file.
If a file being compiled contains a call to a subprogram for which pragma Inline applies and inlining is activated with the -gnatn switch, the object file depends on the file containing the body of this subprogram as well as on the file containing the spec. Similarly if the -gnatN switch is used, then the unit is dependent on all body files.
The object file for a parent unit depends on all its subunit body files.
These rules are applied transitively: if unit A with's unit B, whose elaboration calls an inlined procedure in package C, the object file for unit A will depend on the body of C, in file c.adb.
The set of dependent files described by these rules includes all the files on which the unit is semantically dependent, as described in the Ada 95 Language Reference Manual. However it is larger because of the inclusion of generic, inline, and subunit dependencies.
An object file must be recreated by recompiling the corresponding source file if any of the source files on which it depends are modified. For example, if the make utility is used to control compilation, the rule for an Ada object file must mention all the source files on which the object file depends. The determination of the necessary recompilations may be done automatically using gnatmake.