So far, we have seen examples of projects that create executables. However, it is also possible to create libraries instead. A `library' is a specific type of subsystem where, for convenience, objects are grouped together using system-specific means such as archives or windows DLLs.
Library projects provide a system- and language-independent way of building both `static' and `dynamic' libraries. They also support the concept of `standalone libraries' (SAL) which offer two significant properties: the elaboration (e.g. initialization) of the library is either automatic or very simple; a change in the implementation part of the library implies minimal post-compilation actions on the complete system and potentially no action at all for the rest of the system in the case of dynamic SALs.
There is a restriction on shared library projects: by default, they are only allowed to import other shared library projects. They are not allowed to import non library projects or static library projects.
The GNAT Project Manager takes complete care of the library build, rebuild and
installation tasks, including recompilation of the source files for which
objects do not exist or are not up to date, assembly of the library archive, and
installation of the library (i.e., copying associated source, object and
ALI files to the specified location).