1 $(VAR) = "foo bar baz" 2 a 3 b 4 c 5 foo baR baz, bar baz, foo bar baz, fooadd baradd bazadd 6 mkdir -p 'dir' 7 touch 'dir/obj_1.h' 8 mkdir -p 'dir' 9 printf '#include "obj_1.h"\nconst char* obj_1 = "dir/obj_1.c";' \ 10 >'dir/obj_1.c' 11 Local variables 12 $(@)="dir/obj_1.o" $(<)="dir/obj_1.c" 13 $(*)="dir/obj_1" $(?)="dir/obj_1.h dir/obj_1.c" 14 $(%)="" 15 16 Directory and filename parts of local variables 17 $(@D)="dir" $(@F)="obj_1.o" 18 $(<D)="dir" $(<F)="obj_1.c" 19 $(*D)="dir" $(*F)="obj_1" 20 $(?D)="dir dir" $(?F)="obj_1.h obj_1.c" 21 $(%D)="" $(%F)="" 22 23 Local variable substitutions 24 $(@:.o=)="dir/obj_1" $(<:.c=.C)="dir/obj_1.C" 25 $(*:=.h)="dir/obj_1.h" $(?:.h=.H)="dir/obj_1.H dir/obj_1.c" 26 $(%:=)="" 27 28 Target with suffix transformations 29 $(@D:=append)="dirappend" 30 $(@F:.o=.O)="obj_1.O" 31 32 Implied source with suffix transformations 33 $(<D:r=rr)="dirr" 34 $(<F:.c=.C)="obj_1.C" 35 36 Suffixless target with suffix transformations 37 $(*D:.=dot)="dir" 38 $(*F:.a=)="obj_1" 39 40 Out-of-date dependencies with suffix transformations 41 $(?D:ir=)="d d" 42 $(?F:.h=.H)="obj_1.H obj_1.c" 43 44 Member with suffix transformations 45 $(%D:.=)="" 46 $(%F:$(VAR2)=$(VAR))="" 47 48 cc -c -o 'dir/obj_1.o' 'dir/obj_1.c' 49 mkdir -p '.' 50 touch 'dummy' 51 Local variables 52 $(@)="lib.a" $(<)="dir/obj_1.o" 53 $(*)="obj1" $(?)="dir/obj_1.o dummy" 54 $(%)="obj1.o" 55 56 Directory and filename parts of local variables 57 $(@D)="." $(@F)="lib.a" 58 $(<D)="dir" $(<F)="obj_1.o" 59 $(*D)="." $(*F)="obj1" 60 $(?D)="dir ." $(?F)="obj_1.o dummy" 61 $(%D)="." $(%F)="obj1.o" 62 63 Local variable substitutions 64 $(@:.o=)="lib.a" $(<:.c=.C)="dir/obj_1.o" 65 $(*:=.h)="obj1.h" $(?:.h=.H)="dir/obj_1.o dummy" 66 $(%:=)="obj1.o" 67 68 Target with suffix transformations 69 $(@D:=append)=".append" 70 $(@F:.o=.O)="lib.a" 71 72 Implied source with suffix transformations 73 $(<D:r=rr)="dirr" 74 $(<F:.c=.C)="obj_1.o" 75 76 Suffixless target with suffix transformations 77 $(*D:.=dot)="dot" 78 $(*F:.a=)="obj1" 79 80 Out-of-date dependencies with suffix transformations 81 $(?D:ir=)="d ." 82 $(?F:.h=.H)="obj_1.o dummy" 83 84 Member with suffix transformations 85 $(%D:.=)="" 86 $(%F:$(VAR2)=$(VAR))="obj1foo bar baz" 87 88 cp 'dir/obj_1.o' 'obj1.o' 89 ar -rcv 'lib.a' 'obj1.o' 90 a - obj1.o 91 rm -f 'obj1.o' 92 mkdir -p '.' 93 printf '#include "obj_2.h"\nconst char* obj_2 = "obj_2.c";' \ 94 >'obj_2.c' 95 mkdir -p '.' 96 touch 'obj_2.h' 97 Local variables 98 $(@)="obj2.o" $(<)="obj_2.c" 99 $(*)="obj2" $(?)="obj_2.c obj_2.h dir/obj_1.h" 100 $(%)="" 101 102 Directory and filename parts of local variables 103 $(@D)="." $(@F)="obj2.o" 104 $(<D)="." $(<F)="obj_2.c" 105 $(*D)="." $(*F)="obj2" 106 $(?D)=". . dir" $(?F)="obj_2.c obj_2.h obj_1.h" 107 $(%D)="" $(%F)="" 108 109 Local variable substitutions 110 $(@:.o=)="obj2" $(<:.c=.C)="obj_2.C" 111 $(*:=.h)="obj2.h" $(?:.h=.H)="obj_2.c obj_2.H dir/obj_1.H" 112 $(%:=)="" 113 114 Target with suffix transformations 115 $(@D:=append)=".append" 116 $(@F:.o=.O)="obj2.O" 117 118 Implied source with suffix transformations 119 $(<D:r=rr)="." 120 $(<F:.c=.C)="obj_2.C" 121 122 Suffixless target with suffix transformations 123 $(*D:.=dot)="dot" 124 $(*F:.a=)="obj2" 125 126 Out-of-date dependencies with suffix transformations 127 $(?D:ir=)=". . d" 128 $(?F:.h=.H)="obj_2.c obj_2.H obj_1.H" 129 130 Member with suffix transformations 131 $(%D:.=)="" 132 $(%F:$(VAR2)=$(VAR))="" 133 134 cc -c -o 'obj2.o' 'obj_2.c' 135 ar -rcv 'lib.a' 'obj2.o' 136 a - obj2.o 137 mkdir -p '.' 138 touch 'obj3.h' 139 mkdir -p 'dir' 140 touch 'dir/dummy' 141 mkdir -p '.' 142 printf '#include "obj3.h"\nconst char* obj3 = "obj3.c";' \ 143 >'obj3.c' 144 Local variables 145 $(@)="lib.a" $(<)="obj3.c" 146 $(*)="obj3" $(?)="obj3.h dir/dummy obj3.c" 147 $(%)="obj3.o" 148 149 Directory and filename parts of local variables 150 $(@D)="." $(@F)="lib.a" 151 $(<D)="." $(<F)="obj3.c" 152 $(*D)="." $(*F)="obj3" 153 $(?D)=". dir ." $(?F)="obj3.h dummy obj3.c" 154 $(%D)="." $(%F)="obj3.o" 155 156 Local variable substitutions 157 $(@:.o=)="lib.a" $(<:.c=.C)="obj3.C" 158 $(*:=.h)="obj3.h" $(?:.h=.H)="obj3.H dir/dummy obj3.c" 159 $(%:=)="obj3.o" 160 161 Target with suffix transformations 162 $(@D:=append)=".append" 163 $(@F:.o=.O)="lib.a" 164 165 Implied source with suffix transformations 166 $(<D:r=rr)="." 167 $(<F:.c=.C)="obj3.C" 168 169 Suffixless target with suffix transformations 170 $(*D:.=dot)="dot" 171 $(*F:.a=)="obj3" 172 173 Out-of-date dependencies with suffix transformations 174 $(?D:ir=)=". d ." 175 $(?F:.h=.H)="obj3.H dummy obj3.c" 176 177 Member with suffix transformations 178 $(%D:.=)="" 179 $(%F:$(VAR2)=$(VAR))="obj3foo bar baz" 180 181 cc -c -o 'obj3.o' 'obj3.c' 182 ar -rcv 'lib.a' 'obj3.o' 183 a - obj3.o 184 rm -f 'obj3.o' 185 ar -s 'lib.a' 186 exit status 0 187