Info Node: (make.info)Special Variables

CFHT HOME make.info: Special Variables


up: Using Variables prev: Suppressing Inheritance Back to Software Index

6.14 Other Special Variables
============================

GNU `make' supports some variables that have special properties.

`MAKEFILE_LIST'
     Contains the name of each makefile that is parsed by `make', in
     the order in which it was parsed.  The name is appended just
     before `make' begins to parse the makefile.  Thus, if the first
     thing a makefile does is examine the last word in this variable, it
     will be the name of the current makefile.  Once the current
     makefile has used `include', however, the last word will be the
     just-included makefile.

     If a makefile named `Makefile' has this content:

          name1 := $(lastword $(MAKEFILE_LIST))

          include inc.mk

          name2 := $(lastword $(MAKEFILE_LIST))

          all:
                  @echo name1 = $(name1)
                  @echo name2 = $(name2)

     then you would expect to see this output:

          name1 = Makefile
          name2 = inc.mk

`.DEFAULT_GOAL'
     Sets the default goal to be used if no targets were specified on
     the command line (Note: Arguments to Specify the Goals.).
     The `.DEFAULT_GOAL' variable allows you to discover the current
     default goal, restart the default goal selection algorithm by
     clearing its value, or to explicitly set the default goal.  The
     following example illustrates these cases:

          # Query the default goal.
          ifeq ($(.DEFAULT_GOAL),)
            $(warning no default goal is set)
          endif

          .PHONY: foo
          foo: ; @echo $@

          $(warning default goal is $(.DEFAULT_GOAL))

          # Reset the default goal.
          .DEFAULT_GOAL :=

          .PHONY: bar
          bar: ; @echo $@

          $(warning default goal is $(.DEFAULT_GOAL))

          # Set our own.
          .DEFAULT_GOAL := foo

     This makefile prints:

          no default goal is set
          default goal is foo
          default goal is bar
          foo

     Note that assigning more than one target name to `.DEFAULT_GOAL' is
     illegal and will result in an error.

`MAKE_RESTARTS'
     This variable is set only if this instance of `make' has restarted
     (Note: How Makefiles Are Remade.): it will
     contain the number of times this instance has restarted.  Note
     this is not the same as recursion (counted by the `MAKELEVEL'
     variable).  You should not set, modify, or export this variable.

`.RECIPEPREFIX'
     The first character of the value of this variable is used as the
     character make assumes is introducing a recipe line.  If the
     variable is empty (as it is by default) that character is the
     standard tab character.  For example, this is a valid makefile:

          .RECIPEPREFIX = >
          all:
          > @echo Hello, world

     The value of `.RECIPEPREFIX' can be changed multiple times; once
     set it stays in effect for all rules parsed until it is modified.

`.VARIABLES'
     Expands to a list of the _names_ of all global variables defined
     so far.  This includes variables which have empty values, as well
     as built-in variables (*note Variables Used by Implicit Rules:
     Implicit Variables.), but does not include any variables which are
     only defined in a target-specific context.  Note that any value
     you assign to this variable will be ignored; it will always return
     its special value.

`.FEATURES'
     Expands to a list of special features supported by this version of
     `make'.  Possible values include:

    `archives'
          Supports `ar' (archive) files using special filename syntax.
          Note: Using `make' to Update Archive Files.

    `check-symlink'
          Supports the `-L' (`--check-symlink-times') flag.  Note:
          Summary of Options.

    `else-if'
          Supports "else if" non-nested conditionals.  Note: Syntax of
          Conditionals.

    `jobserver'
          Supports "job server" enhanced parallel builds.  Note:
          Parallel Execution.

    `second-expansion'
          Supports secondary expansion of prerequisite lists.

    `order-only'
          Supports order-only prerequisites.  Note: Types of
          Prerequisites.

    `target-specific'
          Supports target-specific and pattern-specific variable
          assignments.  *Note Target-specific Variable Values:
          Target-specific.


`.INCLUDE_DIRS'
     Expands to a list of directories that `make' searches for included
     makefiles (Note: Including Other Makefiles.).



automatically generated by info2www version 1.2