Next: A simple example, Previous: Build variables, Up: Anatomy of a GSRC Makefile [Contents]
The final section of the GSRC Makefile contains the specifics of
building the package. For most cases, it is sufficient to just add
include ../../gar.lib/auto.mk
, which will work for any package
that follows the GNU building and installation standards. This will,
among other actions, automatically define the
CONFIGURE_SCRIPTS
, BUILD_SCRIPTS
and
INSTALL_SCRIPTS
variables and it will include the gar.mk
Makefile. If the package does not follow this building standard, then
add include ../../gar.mk
directly. Following this, the user’s
package configuration should be loaded with include config.mk
.
Because there is the possibility that the user specify some
configuration options, any further options that must be set within the
Makefile should be done after the user configuration has been
loaded. By convention, whereas the user specifies options with the
CONFIGURE_OPTS
and BUILD_OPTS
variables, inside the
GSRC Makefile options should be included by appending to the
CONFIGURE_ARGS
and BUILD_ARGS
variables:
CONFIGURE_ARGS += --some-option
Finally, if necessary, the actual recipes are written. Note that if gar.lib/auto.mk was included, no recipes should need to be written. In general, there are two kinds of targets for which recipes may need to be written.
The first correspond to the files listed under
CONFIGURE_SCRIPTS
, BUILD_SCRIPTS
and
INSTALL_SCRIPTS
. As mentioned previously, user-level targets,
such as build, depend on lower-level targets such as
build-work/hello-2.9/Makefile. These are the targets that
must be implemented for each of the designated configure/build/install
scripts. For each target, a recipe is written using the normal Make
syntax to perform the necessary task. Recall that phony targets may be
specified as configure/build/install scripts. So, if
INSTALL_SCRIPTS = java
, then a target named install-java
must be written.
The second kind of targets that may be written are pre- and post- rules. These recipes are run before or after the specified top-level target. For example, a target called pre-build is run immediately before the build target. These targets are convenient for performing pre- or post-processing on files. Note that there are also pre-everything and post-everything targets that can be written.
Next: A simple example, Previous: Build variables, Up: Anatomy of a GSRC Makefile [Contents]