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