From eaaab502c1a10032f4533ca013a39f1a83a7f82b Mon Sep 17 00:00:00 2001
From: johannst .rodata
section as follows:
make
rulestarget .. : prerequisite ..
+ recipe
+ ..
+
+target
: an output generated by the ruleprerequisite
: an input that is used to generate the targetrecipe
: list of actions to generate the output from the input++Use
+make -p
to print all rules and variables (implicitly + explicitly defined).
A pattern rule contains the %
char (exactly one of them) and look like this example:
%.o : %.c
+ $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
+
+The target matches files of the pattern %.o
, where %
matches any none-empty
+substring and other character match just them self.
The substring matched by %
is called the stem
.
%
in the prerequisite stands for the matched stem
in the target.
As targets and prerequisites in pattern rules can't be spelled explicitly in +the recipe, make provides a set of automatic variables to work with:
+$@
: Name of the target that triggered the rule.$<
: Name of the first prerequisite.$^
: Names of all prerequisites (without duplicates).$+
: Names of all prerequisites (with duplicates).$*
: Stem of the pattern rule.# file: Makefile
+
+all: foobar blabla
+
+foo% bla%: aaa bbb bbb
+ @echo "@ = $@"
+ @echo "< = $<"
+ @echo "^ = $^"
+ @echo "+ = $+"
+ @echo "* = $*"
+ @echo "----"
+
+aaa:
+bbb:
+
+Running above Makefile
gives:
@ = foobar
+< = aaa
+^ = aaa bbb
++ = aaa bbb bbb
+* = bar
+----
+@ = blabla
+< = aaa
+^ = aaa bbb
++ = aaa bbb bbb
+* = bla
+----
+
+Substitute strings matching pattern in a list.
+in := a.o l.a c.o
+out := $(in:.o=.c)
+# => out = a.c l.a c.c
+
+filter
Keep strings matching a pattern in a list.
+in := a.a b.b c.c d.d
+out := $(filter %.b %.c, $(in))
+# => out = b.b c.c
+
+filter-out
Remove strings matching a pattern from a list.
+in := a.a b.b c.c d.d
+out := $(filter-out %.b %.c, $(in))
+# => out = a.a d.d
+
+abspath
Resolve each file name as absolute path (don't resolve symlinks).
+$(abspath fname1 fname2 ..)
+
+### `realpath`
+Resolve each file name as canonical path.
+```make
+$(realpath fname1 fname2 ..)
+
LD_PRELOAD=<l_so> colon separated list of libso's to be pre loaded
--
cgit v1.2.3