Runtime macros receive values as
make is making
targets. They take on different values for each target. These are
the recognized runtime macros:
- $@
- Evaluates to the full name of the target, when building a normal
target. When building a library, it expands to the name of the archive
library. For example, if the target is mylib(member), $@ expands
to mylib.
- $%
- Also evaluates to the full name of the target, when building
a normal target. When building a library, it expands to the name of
the archive member. In the previous example, $% expands
to member.
- $&
- Evaluates to the list of all prerequisites, in all rules that
apply to the target.
- $?
- Evaluates to the list of all prerequisites that are newer than
the target. In inference rules, however, this macro evaluates
to the same value as the $^ macro.
- $>
- Evaluates to the name of the library if the current target is
a library member. For example, if the target is mylib(member), $> expands
to mylib.
- $^
- Evaluates to the list of prerequisites given in the rule that
contains the recipe make is executing.
- $<
- In normal rules, it evaluates the same as $?. In inference
rules it evaluates to the single prerequisite that causes the execution
of the rule.
- $*
- Is equivalent to $(%:db). This expands to the target
name with no suffix.
- $$
- Expands to $.
The following example illustrates the difference between these:
a.o : a.c
a.o : b.h c.h
recipe for making a.o
Assume
a.c and
c.h are newer than
a.o, whereas
b.h is not. When
make executes
the recipe for
a.o, the macros expand to the
following values:
$@ → a.o
$* → a
$& → a.c b.h c.h
$? → a.c c.h
$^ → b.h c.h
$< → b.h c.h
Consider this example of a library target:
mylib(mem1.o):
recipe…
For this target, the internal macros then expand to:
$@ → mylib
$* → mem1
$> → mylib