рдпрд╣ рдХрдорд╛рдВрдб makepp_functions рд╣реИ рдЬрд┐рд╕реЗ рд╣рдорд╛рд░реЗ рдХрдИ рдореБрдлреНрдд рдСрдирд▓рд╛рдЗрди рд╡рд░реНрдХрд╕реНрдЯреЗрд╢рди рдЬреИрд╕реЗ рдЙрдмрдВрдЯреВ рдСрдирд▓рд╛рдЗрди, рдлреЗрдбреЛрд░рд╛ рдСрдирд▓рд╛рдЗрди, рд╡рд┐рдВрдбреЛрдЬ рдСрдирд▓рд╛рдЗрди рдПрдореБрд▓реЗрдЯрд░ рдпрд╛ рдореИрдХ рдУрдПрд╕ рдСрдирд▓рд╛рдЗрди рдПрдореБрд▓реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдСрдирд╡рд░реНрдХреНрд╕ рдлреНрд░реА рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдкреНрд░рджрд╛рддрд╛ рдореЗрдВ рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдХрд╛рд░реНрдпрдХреНрд░рдо:
рдирд╛рдо
makepp_functions--makepp рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди
рд╡рд░реНрдгрди
A: рдирд┐рд░рдкреЗрдХреНрд╖_рдлрд╝рд╛рдЗрд▓рдирд╛рдо,
рдирд┐рд░рдкреЗрдХреНрд╖_рдлрд╝рд╛рдЗрд▓рдирд╛рдо_рдиреЛрд▓рд┐рдВрдХ,
Abspath,
рдЙрдкрд╕рд░реНрдЧ рдЬреЛрдбрд╝реЗрдВ,
рдЬреЛрдбрд╝рд╛ рдкреНрд░рддреНрдпрдп,
рддрдерд╛, B: рдЖрдзрд╛рд░ рдирд╛рдо, C: , рдлреЛрди D: рдбреАрдЖрдИрдЖрд░,
dir_noslash, E: рддреНрд░реБрдЯрд┐, F: рдлрд╛рдЗрд▓ рд╕рдмрд╕реНрдЯ,
рдлрд┐рд▓реНрдЯрд░,
рдлрд┐рд▓реНрдЯрд░ рдЦрддрдо рд╣реЛ рдЧрдпрд╛,
рдлрд╝рд┐рд▓реНрдЯрд░_рдЖрдЙрдЯ_рдбреАрдЖрдИрдЖрд░,
рдлрд╝рд╛рдЗрд▓ рдвреВрдВрдвреЗ,
рдкрд╣рд▓реЗ_рдКрдкрд░_рдЦреЛрдЬреЗрдВ,
рдЦреЛрдЬ_рдкреНрд░реЛрдЧреНрд░рд╛рдо,
рдлрд╛рдЗрдВрдбрд╕реНрдЯреНрд░рд┐рдВрдЧ,
рдЦреЛрдЬреЗрдВ_рдКрдкрд░ рдХреА рдУрд░,
рдкреНрд░рдердо_рдЙрдкрд▓рдмреНрдз,
рдкрд╣рд▓рд╛ рд╢рдмреНрдж,
рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП, I: рдЕрдЧрд░,
рдпрджрд┐ рд╕рд╣реА,
рдЕрдиреБрдорд╛рди_рд▓рд┐рдВрдХрд░,
infer_objects,
рдЬрд╛рдирдХрд╛рд░реА, J: рд╢рд╛рдорд┐рд▓ рд╣реЛрдВ, M: рдирд┐рд░реНрдорд╛рдг,
рдореЗрдХрдореИрдк,
рдореЗрдХрдкрд░реНрд▓,
рдирдХреНрд╢рд╛,
"рдПрдордХреЗрдЯреЗрдореНрдк", N: рдиреЛрдЯрджрд┐рд░, O: рдХреЗрд╡рд▓_рдЙрддреНрдкрдиреНрди,
рдХреЗрд╡рд▓_рд▓рдХреНрд╖реНрдп рдирд╣реАрдВ,
рдХреЗрд╡рд▓_рдлреЛрдиреА_рд▓рдХреНрд╖реНрдп,
рдХреЗрд╡рд▓_рдмрд╛рд╕реА,
рдХреЗрд╡рд▓_рд▓рдХреНрд╖реНрдп,
рдпрд╛,
рдореВрд▓, P: рдкреИрдЯрд╕рдмрд╕реНрдЯ,
рдкрд░реНрд▓,
рдирдХрд▓реА,
рдкреВрд░реНрд╡ рдирд┐рд░реНрдорд╛рдг,
рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ, R: рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрде,
рд╕рд╛рдкреЗрдХреНрд╖_рдлрд╝рд╛рдЗрд▓рдирд╛рдо,
рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖, S: рдЦреЛрд▓,
рдЫрд╛рдБрдЯрдирд╛,
рдкрдЯреНрдЯреА,
рд╕реНрдерд╛рдирд╛рдкрдиреНрди,
рдкреНрд░рддреНрдпрдп, T: рдЕрд╕реНрдерд╛рдпреА, W: рдЪреЗрддрд╛рд╡рдиреА,
рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб,
рд╢рдмреНрдж,
рд╢рдмреНрдж рд╕реВрдЪреА,
рд╢рдмреНрджреЛрдВ, X: xargs
"$(рдирд╛рдо)" рдкреНрд░рд╛рд░реВрдк рдХреА рдХреЛрдИ рднреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐, рдЬрд╣рд╛рдВ "рдирд╛рдо" рдХрд┐рд╕реА рдЪрд░ рдХрд╛ рдирд╛рдо рдирд╣реАрдВ рд╣реИ, рдпрд╛
"$(рдирд╛рдо arg1 arg2 arg3)" рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдХреА рдЬрд╛рддреА рд╣реИред рдирд╛рдо рдореЗрдВ рдЕрдХреНрд╖рд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ,
рдЕрдВрдбрд░рд╕реНрдХреЛрд░, рдпрд╛ рд╣рд╛рдЗрдлрд╝рди; рднреНрд░рдо рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рд╣рд╛рдЗрдлрд╝рди рдпрд╛ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдкрд░рд╕реНрдкрд░ рд╡рд┐рдирд┐рдордп рдХреЗ рдХрд╛рд░рдг, рдЪреВрдБрдХрд┐ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рд╣рд╛рдЗрдлрд╝рди рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рдРрд╕реЗ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░ рд░рд╣реЗ рд╣реИрдВ
рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдмрд╕ рдПрдХ рдкрд░реНрд▓ рд╕рдмрд░реВрдЯреАрди рдХрд╛ рдЖрд╣реНрд╡рд╛рди рдХрд░рддреА рд╣реИред рдпрджрд┐ "рдирд╛рдо" рдХреЗ рдкрд╣рд▓реЗ "&" рдЖрддрд╛ рд╣реИ рддреЛ рдпрд╣ рдЪрд▓рддрд╛ рд╣реИ
рдореЗрдХрдк рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рднреАрддрд░ рдЙрд╕ рдирд╛рдо рдХрд╛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрдорд╛рдВрдб рдпрд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ, рдФрд░ рдорд╛рдирдХ рд▓реМрдЯрд╛рддрд╛ рд╣реИ
рдЖрдЙрдЯрдкреБрдЯ. рдЗрд╕рдХреЗ рд▓рд┐рдП PerlIO рдХреЗ рд▓рд┐рдП рдкрд░реНрд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдпрджрд┐ рдирд╛рдо рдореЗрдВ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдирд╛рдо рдирд╣реАрдВ рд╣реИ
рдпрд╣ рдХреЙрд▓ рдХреЗ рдЖрд╣реНрд╡рд╛рди рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред
рд╡реИрд░рд┐рдПрдмрд▓ рдХреА рддрд░рд╣ рдЖрдкрдХреЗ рдкрд╛рд╕ "$(рдирд╛рдо ...)" рдпрд╛ "${рдирд╛рдо ...}" рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реЛрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ
рд╕рдорд╛рди рдХреЛрд╖реНрдардХ рдПрдореНрдмреЗрдб рдХрд░реЗрдВ, рдЗрд╕реЗ рдпреБрдЧреНрдорд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдп рдХреЛрдИ рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛: "$(name
...(){..." рдпрд╛ "${рдирд╛рдо ...{}(...}"ред (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдорд╛рдирдЪрд┐рддреНрд░ рдФрд░ рдкрд░реНрд▓ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓рд╛ рд╕рдорд╛рдкрди рдкреИрд░реЗрди рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ
рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ред) рджреЛрд╣рд░реАрдХрд░рдг рддрд░реНрдХреЛрдВ рдХреЛ рдХрдИ рдкрдВрдХреНрддрд┐рдпреЛрдВ рддрдХ рдлреИрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдирдИ рд▓рд╛рдЗрдиреЗрдВ рд╣реИрдВ
рдлрд┐рд░ рд╕рдВрднрд╡рддрдГ "рдкрд░рд┐рднрд╛рд╖рд┐рдд" рдХреЛ рдЫреЛрдбрд╝рдХрд░, рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рд╕рд┐рдВрдЯреИрдХреНрд╕ "$[name...]" рднреА рд╣реИ
рдпрд╛ $[[рдирд╛рдо ...]], рдЬрд┐рд╕рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдЧреНрд░реЙрдХрд┐рдВрдЧ рдирд┐рдпрдореЛрдВ рд╕реЗ рдкрд╣рд▓реЗ рдореЗрдХрдлрд╝рд╛рдЗрд▓ рдкрдврд╝рддреЗ рд╕рдордп рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рдФрд░ рдЕрдиреНрдп рдирд┐рд░реНрдорд╛рдгред
Makepp рдореЗрдВ рдХрдИ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдлрд╝рдВрдХреНрд╢рди рд╣реИрдВ рдЬреЛ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд▓рдЧрднрдЧ рд╕рднреА рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ
рдЬреАрдПрдирдпреВ рдореЗрдХ рдХреЗ рдкрд╛рдареНрдп рдХрд╛рд░реНрдп (рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдЬреАрдПрдирдпреВ рдореЗрдХ рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рджреЗрдЦреЗрдВ), рдФрд░ рдЗрд╕рдХреЗ рдХреБрдЫ
рдЕрдкрдирд╛ред рдЖрдк рдЬреЛ рдЪрд╛рд╣реЗрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрд▓ рд╕рдмрд░реВрдЯреАрдиреНрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред "рдЙрдк" рдХрдерди рджреЗрдЦреЗрдВ
рдФрд░ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдореЗрдХрдк рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдкрд░ рдЕрдиреБрднрд╛рдЧред
рд╕рд╢рд░реНрдд рдХрд╛рд░реНрдп
рдФрд░ рд╢рд░реНрдд1[,рд╣рд╛рд▓рдд2[,рд╣рд╛рд▓рдд3...]]
рдФрд░ рдлрд╝рдВрдХреНрд╢рди "рд╢реЙрд░реНрдЯ-рд╕рд░реНрдХрд┐рдЯрд┐рдВрдЧ" AND рдСрдкрд░реЗрд╢рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рддрд░реНрдХ рд╣реИ
рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд, рдХреНрд░рдо рдореЗрдВред рдпрджрд┐ рдХреЛрдИ рддрд░реНрдХ рдПрдХ рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рддрдХ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рд░реБрдХ рдЬрд╛рддреА рд╣реИ рдФрд░
рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИред рдпрджрд┐ рд╕рднреА рддрд░реНрдХреЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдЧреИрд░-рддрдХ рд╣реЛрддрд╛ рд╣реИ
рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рддреЛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЕрдВрддрд┐рдо рддрд░реНрдХ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реИред
if рд╕реНрдЯреНрд░рд┐рдВрдЧ, рдкрд░рд┐рдгрд╛рдо-рдпрджрд┐-рд╕реНрдЯреНрд░рд┐рдВрдЧ-рдЦрд╛рд▓реА рдирд╣реАрдВ[, рдкрд░рд┐рдгрд╛рдо-рдпрджрд┐-рд╕реНрдЯреНрд░рд┐рдВрдЧ-рд░рд┐рдХреНрдд]
рдпрджрд┐ рд╕рд╣реА рд╕реНрдЯреНрд░рд┐рдВрдЧ, рдкрд░рд┐рдгрд╛рдо-рдпрджрд┐-рд╕реНрдЯреНрд░рд┐рдВрдЧ-рд╕рддреНрдп[, рдкрд░рд┐рдгрд╛рдо-рдпрджрд┐-рд╕реНрдЯреНрд░рд┐рдВрдЧ-рдЧрд▓рдд]
"ifeq", рдЖрджрд┐ рдХрдердиреЛрдВ рдХрд╛ рдПрдХ рд╡рд┐рдХрд▓реНрдкред рдпрджрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд░рд┐рдХреНрдд рдирд╣реАрдВ рд╣реИ (рдЕрд░реНрдерд╛рдд,
рд╢рд░реНрдд рд╕рддреНрдп рд╣реИ), рджреВрд╕рд░рд╛ рддрд░реНрдХ ("рддрдм" рдЦрдВрдб) рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдмрд╛рдж рдореЗрдВ)ред
рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рд╡рд┐рд╕реНрддрд╛рд░); рдпрджрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд░рд┐рдХреНрдд рд╣реИ, рддреЛ рддреАрд╕рд░рд╛ рддрд░реНрдХ ("рдЕрдиреНрдп" рдЦрдВрдб) рд╣реИ
рд▓реМрдЯрд╛ рд╣реБрдЖред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
CFLAGS := $(рдпрджрд┐ $(рдлрд╝рд┐рд▓реНрдЯрд░ gcc egcc, $(CC)), -g -рджреАрд╡рд╛рд░, -g)
рдпрджрд┐ рдЪрд░ CC рдпрд╛ рддреЛ "gcc" рдпрд╛ "egcc", рдФрд░ "-g" рд╣реИ рддреЛ CFLAGS рдХреЛ "-g -Wall" рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдЕрдиреНрдпрдерд╛ред (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдмрд┐рд▓реНрдб рдирд┐рдпрдо рдпрд╣реА рдХрд░рддреЗ рд╣реИрдВред)
"iftrue" "if" рдХреЗ рд╕рдорд╛рди рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ 0 рдХреЛ рд░рд┐рдХреНрдд рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред
or рд╢рд░реНрдд1[,рд╣рд╛рд▓рдд2[,рд╣рд╛рд▓рдд3...]]
рдпрд╛ рдлрд╝рдВрдХреНрд╢рди "рд╢реЙрд░реНрдЯ-рд╕рд░реНрдХрд┐рдЯрд┐рдВрдЧ" OR рдСрдкрд░реЗрд╢рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рддрд░реНрдХ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ,
рдХреНрд░рдо рдореЗрдВред рдпрджрд┐ рдХреЛрдИ рддрд░реНрдХ рдПрдХ рдЧреИрд░-рд░рд┐рдХреНрдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рддрдХ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ рддреЛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд░реБрдХ рдЬрд╛рддрд╛ рд╣реИ рдФрд░
рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╡рд╣ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИред рдпрджрд┐, рд╕рднреА рддрд░реНрдХреЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╕рднреА
рд╡реЗ рдЭреВрдареЗ (рдЦрд╛рд▓реА) рд╣реИрдВ, рддреЛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИред
рдкрдЯреНрдЯрд┐рдХрд╛ рдФрд░ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рдХрд╛рд░реНрдп
рдирд┐рд░рдкреЗрдХреНрд╖_рдлрд╝рд╛рдЗрд▓рдирд╛рдо рдлрд╝рд╛рдЗрд▓реЛрдВ
рдПрдмреНрд╕рдкрде рдлрд╝рд╛рдЗрд▓реЛрдВ
рд╕рд╛рдкреЗрдХреНрд╖ рдлрд╝рд╛рдЗрд▓ рдирд╛рдореЛрдВ рдХреЛ рдмрд┐рдирд╛ рдирд┐рд░рдкреЗрдХреНрд╖ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ . or ..ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
"$(absolute_filename xyz.c)" "/usr/src/our_project/subdir/xyz.c" рд▓реМрдЯрд╛ рд╕рдХрддрд╛ рд╣реИред
рдирд┐рд░рдкреЗрдХреНрд╖_рдлрд╝рд╛рдЗрд▓рдирд╛рдо_рдиреЛрд▓рд┐рдВрдХ рдлрд╝рд╛рдЗрд▓реЛрдВ
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрде рдлрд╝рд╛рдЗрд▓реЛрдВ
рдирд┐рд░рдкреЗрдХреНрд╖_рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХреА рддрд░рд╣, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреАрдХрд╛рддреНрдордХ рд▓рд┐рдВрдХ рд╣рд▓ рд╣реЛ рдЧрдП рд╣реИрдВред
рдмреЗрд╕рдирд╛рдо рдлрд╝рд╛рдЗрд▓ рдирд╛рдо
рдмреЗрд╕рдиреЗрдо рд╕рдВрдкреВрд░реНрдг рдлрд╝рд╛рдЗрд▓ рдирд╛рдо (рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рд╕рд╛рде) рд╣реИ, рдФрд░ рдХреЗ рдмрд╛рдж рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдШрдЯрд╛ рджреЗрддрд╛ рд╣реИ
рдЕрдВрддрд┐рдо рдЕрд╡рдзрд┐ рд╕рд╣рд┐рдд. рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "$(basename myfile/version-1.0-module.c)" рд╣реИ
"рдорд╛рдИрдлрд╝рд╛рдЗрд▓/рд╕рдВрд╕реНрдХрд░рдг-1.0-рдореЙрдбреНрдпреВрд▓"
рджреАрд░ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо
рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рд╕реВрдЪреА рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рднрд╛рдЧ, рдЬрд┐рд╕рдореЗрдВ рдЕрдиреБрдЧрд╛рдореА рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ, рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИ
рдХрд╛рдЯрдирд╛. рдпрджрд┐ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдореЗрдВ рдХреЛрдИ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдирд╣реАрдВ рд╣реИ рддреЛ "./" рд▓реМрдЯрд╛рддрд╛ рд╣реИред
dir_noslash рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо
"$(dir )" рдХреЗ рд╕рдорд╛рди, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдпрд╣ рдкрд┐рдЫрд▓рд╛ рд╕реНрд▓реИрд╢ рдирд╣реАрдВ рд▓реМрдЯрд╛рддрд╛ред
рдлрд╛рдЗрд▓ рд╕рдмрд╕реНрдЯ рдкреИрдЯрд░реНрди, рд╡рд┐рдХрд▓реНрдк, рд╢рдмреНрдж
рдлрд╝рд╛рдЗрд▓ рдирд╛рдореЛрдВ рдкрд░ рдПрдХ рдкреИрдЯрд░реНрди рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХрд░реЗрдВ. рдпрд╣ рдкреИрдЯрд╕рдмрд╕реНрдЯ рд╕реЗ рднрд┐рдиреНрди рд╣реИ
рдЬрдм рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╡реИрдХрд▓реНрдкрд┐рдХ рдирд╛рдо рджрд┐рдП рдЬрд╛рдПрдВрдЧреЗ рддреЛ рдпрд╣ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рд░реНрдп рдХрд░реЗрдЧрд╛
рд╡реЗ рдкреНрд░рддрд┐рд╢рдд рдЪрд┐рд╣реНрди рд╕реЗ рдкрд╣рд▓реЗ рдЖрддреЗ рд╣реИрдВ)ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
$(filesubst ./src/%c, %o, $(рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб src/*.c))
рдлрд╛рдЗрд▓ рд╕рдмрд╕реНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдЧрд╛ рд▓реЗрдХрд┐рди рдкреИрдЯ рд╕рдмрд╕реНрдЯ рдХреЗ рд╕рд╛рде рдирд╣реАрдВред
рдлрд╝рд┐рд▓реНрдЯрд░_рдЖрдЙрдЯ_рдбреАрдЖрдИрдЖрд░ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо
рдЙрди рд╕рднреА рдлрд╝рд╛рдЗрд▓рдирд╛рдореЛрдВ рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬреЛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
рдлрд╝рд╛рдЗрд▓ рдвреВрдВрдвреЗ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо, рдкрде
рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкрде рдореЗрдВ, рдпрд╛ рдпрджрд┐ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ рддреЛ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ PATH рдореЗрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдвреВрдБрдврддрд╛ рд╣реИ
рдирд┐рд░реНрджрд┐рд╖реНрдЯ. рдпрд╣ рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ рдЦреЛрдЬрдиреЗ рдпрд╛ рдлрд╝рд╛рдЗрд▓реЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
TCL_INCLUDE := -I$(dir_noslash $(findfile tcl.h, \
/usr/local/stow/tcl-8.4.5-nothread/include \
/usr/include/tcl8.4 /usr/include/tcl \
/net/na1/tcl8.4a3/include /net/na1/tcl8.4a3/include))
рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИ рдЯреАрд╕реАрдПрд▓.рдПрдЪ рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рдЦреЛрдЬрдХрд░ред рдкреВрд░реНрдг
рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкрде рд▓реМрдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ. рдлрд┐рд░ "$(dir_noslash )" рдЙрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИ, рдФрд░ рдЙрд╕реЗ
рд╕рдореНрдорд┐рд▓рд┐рдд рдкрде рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЦреЛрдЬ_рдкреНрд░реЛрдЧреНрд░рд╛рдо рдирд╛рдо
рд╕реВрдЪреА рдореЗрдВ рдкрд╣рд▓рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓реМрдЯрд╛рдПрдБ рдЬреЛ PATH рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реИ
рдЬрдм рдХрдИ рд╕рдорддреБрд▓реНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╣реЛрдВ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЖрдк рдмрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ
рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдЪреБрдиреЗрдВ. рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ рдХрдИ рд╕рд╛рдорд╛рдиреНрдп рдХреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкрд░рд┐рднрд╛рд╖рд╛ рджреА рдЧрдИ рд╣реИ
рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдореЗрдХрдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ рдирд╣реАрдВ рдбрд╛рд▓рддреЗ рд╣реИрдВ рддреЛ рд╡реЗ рд╡реЗрд░рд┐рдПрдмрд▓ рдЬреЛ рдореЗрдХрдк рдЖрдкреВрд░реНрддрд┐ рдХрд░рддрд╛ рд╣реИ:
CC = $(find_program gcc egcc pgcc c89 cc) # рдФрд░ рдЕрдзрд┐рдХ, рдорд╢реАрди рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ
F77 = $(find_program f77 g77 fort77)
CXX = $(find_program g++ c++ pg++ cxx CC aCC)
рдпрджрд┐ рдХреЛрдИ рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ, рддреЛ "$(find_program )" рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдФрд░
рдЬреЛ рдирд╣реАрдВ рдорд┐рд▓рд╛ рдЙрд╕реЗ рд▓реЙрдЧ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЖрдо рддреМрд░ рдкрд░ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдореЗрдХрдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣
рдмреЗрд╣рддрд░ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рджреЗрдиреЗ рдХреА рдкреНрд░рд╡реГрддреНрддрд┐ рд╣реЛрдЧреАред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдХреБрдЫ рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ
рдЗрд╕:
%.рдУ:%.рд╕реА
$(CC) $(рдЗрдирдкреБрдЯ) -o $(рдЖрдЙрдЯрдкреБрдЯ)
рдФрд░ рдореЗрдХрдк рдХреЛ рдЙрдкрд░реЛрдХреНрдд рд╕реВрдЪреА рдореЗрдВ рд╕реА рдХрдВрдкрд╛рдЗрд▓рд░ рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ, рдпрд╣ 'рдиреЙрдЯ-рдлрд╛рдЙрдВрдб' рдХрд╛ рд╡рд┐рдХрд▓реНрдк рджреЗрдЧрд╛ред
рдЕрдиреНрдпрдерд╛ рд╢реЗрд▓ рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓ рдФрд░ рдкрд░рд┐рдгрд╛рдореА рддреНрд░реБрдЯрд┐ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдЧрд╛
рд╕рдВрджреЗрд╢ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЬреАрдм рд╣реЛ рд╕рдХрддрд╛ рд╣реИ.
рдКрдкрд░ рдХреА рдУрд░ рдЦреЛрдЬреЗрдВ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо
рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рджрд┐рдП рдЧрдП рдирд╛рдо рдХреА рдлрд╝рд╛рдЗрд▓ рдХреА рдЦреЛрдЬ рдХрд░рддрд╛ рд╣реИред, .., ../ .., редред/../.., рдЖрджрд┐,
рдЬрдм рддрдХ рдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ рдорд┐рд▓ рдЬрд╛рддреА рдпрд╛ рд░реВрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪ рдЬрд╛рддреА рдпрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реНрдерд┐рдд рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддреА
рдХрд┐рд╕реА рднрд┐рдиреНрди рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдкрд░. (рдпрд╣ рдЕрдВрддрд┐рдо рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ
рдСрдЯреЛрдорд╛рдЙрдВрдЯрд░реНрд╕ рдпрд╛ рд╣реИрдВрдЧ рдиреЗрдЯрд╡рд░реНрдХ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдоред) рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдП рд░реВрдЯрдореЗрдХрдкреНрдкрдлрд╛рдЗрд▓, рд╡рд╣ рднреА рд╣реИ
рдПрдХ рдмрд╛рдзрд╛ рдЬреЛ рдЙрдЪреНрдЪрддрд░ рдЦреЛрдЬ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрддреА рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рдХрдИ рд╕реНрддрд░реЛрдВ рд╡рд╛рд▓рд╛ рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИ, рддреЛ рдЖрдк рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдЗрд╕ рд╕рд╛рдорд╛рдиреНрдп рдЯреБрдХрдбрд╝реЗ рдХреЛ рд╕рднреА рдореЗрдХрдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)
рдХрдерди):
TOP_LEVEL_INCLUDE_DIR := $(find_upwards рд╢рд╛рдорд┐рд▓ рд╣реИ)
# рдЙрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреА рдЦреЛрдЬ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ
# рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ.
%.рдУ:%.рд╕реА
$(CC) $(CFLAGS) -I$(TOP_LEVEL_INCLUDE_DIR) -c $(рдЗрдирдкреБрдЯ) -o $(рдЖрдЙрдЯрдкреБрдЯ)
рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдЬрд┐рд╕реЗ "find_upwards" рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ рд╡рд╣ рд╣реИ рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛
рдПрдХ рдирд┐рд░реНрдорд╛рдг рдХрд╛. рдЕрдХреНрд╕рд░ рдХрд┐рд╕реА рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИ:
рд╢реАрд░реНрд╖:= ../../..
рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреБрдЫ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЬрд╛рдирдХрд╛рд░реА рдХреЗрд╡рд▓ рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред рд▓реЗрдХрд┐рди
рдЗрд╕реЗ рдмрдирд╛рдП рд░рдЦрдирд╛ рдХрдард┐рди рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рднрд┐рдиреНрди рд╕реНрддрд░реЛрдВ рдХреЗ рд▓рд┐рдП ".." рдХреА рд╕рдВрдЦреНрдпрд╛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реИ
рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╡реГрдХреНрд╖ рдХрд╛. рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП "find_upwards" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдХреЗрд╡рд▓ рд╢реАрд░реНрд╖ рд╕реНрддрд░реАрдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдореМрдЬреВрдж рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐
рдлрд╝рд╛рдЗрд▓ "рд▓рд╛рдЗрд╕реЗрдВрд╕" рдХреЗрд╡рд▓ рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред рддрдм рдЖрдк рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рдЯреЙрдк := $(dir_noslash $(find_upwards LICENSE))
"$(find_upwards LICENSE)" рд▓рд╛рдЗрд╕реЗрдВрд╕ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкреВрд░рд╛ рдкрде рд▓реМрдЯрд╛рддрд╛ рд╣реИ;
"$(dir_noslash ...)" рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИред
(рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ "рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ" рдХрдерди рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдКрдкрд░ рдХреА рдУрд░ рдЦреЛрдЬ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡рд╣рд╛рдВ
рдРрд╕рд╛ рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ:
$(find_upwardstop_level_rules.mk) рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ
рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рдмрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рд╢реАрд░реНрд╖_рд╕реНрддрд░_рдирд┐рдпрдо.рдПрдордХреЗ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ
рдФрд░ рдпрд╣ рд╡реИрд╕реЗ рд╣реА рдХрд╛рдо рдХрд░реЗрдЧрд╛ред)
рдпрджрд┐ рдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ рдорд┐рд▓рддреА рд╣реИ, рддреЛ "find_upwards" рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрдорд╛рдг рдХреЛ рд░реЛрдХ рджреЗрдЧрд╛ред
рдпрджрд┐ рдЖрдк рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдлрд╝рд╛рдЗрд▓ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ find_upwards рдкрд╣рд▓реА рдлрд╝рд╛рдЗрд▓ рдХреА рдЦреЛрдЬ рдХрд░реЗрдЧрд╛
рджреВрд╕рд░рд╛, рдЗрддреНрдпрд╛рджрд┐ред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ,
$(рдлрд╝рд╛рдЗрд▓_рдКрдкрд░ рдХреА рдУрд░ рдвреВрдВрдвреЗрдВ рдлрд╝рд╛рдЗрд▓1 рдлрд╝рд╛рдЗрд▓2)
рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ
$(рдлрд╝рд╛рдЗрд▓ рдХреЛ рдКрдкрд░ рдХреА рдУрд░ рдвреВрдВрдвреЗрдВ1) $(рдлрд╝рд╛рдЗрд▓ рдХреЛ рдКрдкрд░ рдХреА рдУрд░ рдвреВрдВрдвреЗрдВ2)
рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЦреЛрдЬрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп "find_first_upwards" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдкрд╣рд▓реЗ_рдКрдкрд░_рдЦреЛрдЬреЗрдВ file1 file2 ...
рдпрд╣ рдлрд╝рдВрдХреНрд╢рди "find_upwards" рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдХреА рдкрд╣рд▓реА рдлрд╝рд╛рдЗрд▓ рд▓реМрдЯрд╛рддрд╛ рд╣реИ
рд╕реВрдЪреА рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЗрдВ рдЬреЛ рдЗрд╕реЗ рдорд┐рд▓рддреА рд╣реИрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдпрд╣ рд╡рд░реНрддрдорд╛рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ
рд╕реВрдЪреА рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдлрд╝рд╛рдЗрд▓, рдФрд░ рдкрд╣рд▓реА рдлрд╝рд╛рдЗрд▓ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬреЛ рдореМрдЬреВрдж рд╣реИ рдпрд╛ рдмрдирд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИред
рдпрджрд┐ рдЙрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдХреЛрдИ рднреА рдлрд╝рд╛рдЗрд▓ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ рдпрд╛ рдмрдирд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИ, рддреЛ рдпрд╣ рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ .., рддреЛ
../ .., рдЖрджрд┐, рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рдпрд╛ рддреЛ рд░реВрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдпрд╛ рдХрд┐рд╕реА рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪ рдЬрд╛рддрд╛
рдХрд┐рд╕реА рднрд┐рдиреНрди рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рд╕реНрдерд┐рдд рд╣реИ.
рдкреНрд░рдердо_рдЙрдкрд▓рдмреНрдз file1 file2 ...
рд╕реВрдЪреА рдореЗрдВ рдкрд╣рд▓реА рдлрд╝рд╛рдЗрд▓ рд▓реМрдЯрд╛рдПрдБ рдЬреЛ рдореМрдЬреВрдж рд╣реИ рдпрд╛ рдмрдирд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдорд╢реАрдиреЛрдВ рдпрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдореЗрдХрдлрд╝рд╛рдЗрд▓реНрд╕ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдирд╛, рдЬрд╣рд╛рдБ
рдорд╣рддреНрд╡рдкреВрд░реНрдг рдлрд╝рд╛рдЗрд▓реЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рд╕реНрдерд┐рдд рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдБ рд╕реЗ рдПрдХ рдкрдВрдХреНрддрд┐ рд╣реИ
рдореЗрд░реА рдореЗрдХрдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ:
TCL_LIB = $(first_available \
/usr/local/stow/tcl-8.4.5-nothread/lib/libtcl8.4.so \
/usr/lib/libtcl8.4.so /usr/lib/libtcl.so \
/net/na1/tcl8.4a3/lib/libtcl8.4.a \
/net/na1/tcl8.4a3/lib/libtcl8.4.sl)
рдпрд╣ рд▓рд╛рдЗрди рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рд░реБрдХрддреЗ рд╣реБрдП рдЯреАрд╕реАрдПрд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдЧреА
рдкрд╣рд▓рд╛ рдЬреЛ рдЗрд╕реЗ рдорд┐рд▓рддрд╛ рд╣реИред рдлрд┐рд░ рд▓рд┐рдВрдХ рдХрдорд╛рдВрдб рдореЗрдВ $(TCL_LIB) рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИ
рдЙрдкрдпреБрдХреНрдд рдЯреАрд╕реАрдПрд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реАред
infer_linker file1 file2 ...
рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рджреА рдЧрдИ рд╣реИ, рдпрджрд┐ рд╡реЗ рдЕрднреА рддрдХ рдирд╣реАрдВ рдмрдирд╛рдИ рдЧрдИ рд╣реИрдВ рддреЛ рдкрд╣рд▓реЗ рдЙрдиреНрд╣реЗрдВ рдмрдирд╛рдПрдВред рдлрд┐рд░ рдвреВрдВрдвреЛ
рдЪрд╛рд╣реЗ рд╡реЗ рдлреЛрд░рдЯреНрд░рд╛рди, рд╕реА++ рдпрд╛ рд╕реА рд╕реНрд░реЛрдд рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛрдВ рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рд▓реМрдЯрд╛рдПрдВ
рдХрдВрдкрд╛рдЗрд▓рд░ (рдЬреЛ "рдПрд▓рдбреА" рд╕реЗ рдмреЗрд╣рддрд░ рд▓рд┐рдВрдХ рдХрд░рдирд╛ рдЬрд╛рдирддрд╛ рд╣реИ)ред
infer_objects file1 file2 ... рдкреИрдЯрд░реНрди
$(infer_objects object1.o object2.o, *.o)
рдпрджрд┐ рдЖрдк рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ рдирд╛рдореЛрдВ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдорд╛рдирдХ рд╕рдореНрдореЗрд▓рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореЗрдХрдк рд╕рдХреНрд╖рдо рд╣реИ
рдпрд╣ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдирд╛ рдХрд┐ рдХреМрди рд╕реА ".o" рдпрд╛ ".lo" рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЖрдкрдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реЗ рд▓рд┐рдВрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ
рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ рдлрд╝рд╛рдЗрд▓реЗрдВ рдЪреБрдиреЗрдВ рдЬрд┐рдирдореЗрдВ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдореЙрдбреНрдпреВрд▓ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ
рдХрд╛рд░реНрдпрдХреНрд░рдо. рд▓рд╛рдЗрдмреНрд░реЗрд░реА ".a" рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдФрд░ рд▓рд┐рдВрдХрд░ рдХреЛ рдЪреБрдирдиреЗ рдХреЗ рдмрдЬрд╛рдп
рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдореЙрдбреНрдпреВрд▓, рдореЗрдХрдк рдЖрдкрдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдореЙрдбреНрдпреВрд▓ рдЪреБрди рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣, рдХреЗрд╡рд▓
рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдореЙрдбреНрдпреВрд▓ рд╕рдВрдХрд▓рд┐рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред
рд╡рд╕реНрддреБ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрдХрдк рдХрд╛ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЙрд╕ рдкрд░рдВрдкрд░рд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ
рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ "xyz.h" рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рднреА рд╡рд░реНрдЧреЛрдВ рдпрд╛ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ
"xyz.o" (рдпрд╛ "xyz.lo") рдирд╛рдордХ рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдВрдХрд▓рд┐рддред рддреЛ рдореЗрдХрдкреНрдк рдХрд╛ рдПрд▓реНрдЧреЛрд░рд┐рджрдо
рд╡рд╕реНрддреБ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдЕрдиреБрдорд╛рди рдПрдХ рдпрд╛ рдХреБрдЫ рд╡рд╕реНрддреБрдУрдВ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдРрд╕рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред рдпрд╣ рджреЗрдЦрддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реА рдлрд╝рд╛рдЗрд▓реЗрдВ "#include" рдХреЗ рд╕рд╛рде рд╢рд╛рдорд┐рд▓ рдХреА рдЧрдИ рдереАрдВ
рд╡реЗ рд╕реНрд░реЛрдд, рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рд╕рдВрдмрдВрдзрд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЗрдВ рдвреВрдВрдврдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ
рдлрд╛рдЗрд▓реЗрдВ.
рдХрд┐рд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреА рдирд┐рд░реНрднрд░рддрд╛ рд╕реВрдЪреА рдореЗрдВ "$(infer_objects )" рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЬреИрд╕реЗ
рдЗрд╕:
рдорд╛рдпрдкреНрд░реЛрдЧ: $(infer_objects main.oother_object.o, \
**/*.o /рдЕрдиреНрдп/рд▓рд╛рдЗрдмреНрд░реЗрд░реА/dirs/**/*.o)
$(CXX) $(рдЗрдирдкреБрдЯ) -рдУ $(рдЖрдЙрдЯрдкреБрдЯ) $(LIBS)
"$(infer_objects)" рдлрд╝рдВрдХреНрд╢рди рджреЛ рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред
рдкрд╣рд▓реА рдПрдХ рдпрд╛ рдХреБрдЫ рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЗрдВ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрд╡рд╢реНрдпрдХ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рд╣реИрдВ)ред
рдпрд╣рд╛рдБ рдЕрдиреБрдорддрд┐ рд╣реИ)ред рджреВрд╕рд░реА рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд╕реНрддреБрдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИ (рдЖрдо рддреМрд░ рдкрд░ рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ
рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдпрд╣рд╛рдВ) рдЬрд┐рд╕реЗ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рд▓рд┐рдВрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп
рдлрд╝рдВрдХреНрд╢рди рдПрдХ рд╕реВрдЪреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкрд╣рд▓реЗ рддрд░реНрдХ рдореЗрдВ рд╕рднреА рдСрдмреНрдЬреЗрдХреНрдЯ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░
рдлрд┐рд░ рдЙрдирдХреЗ рдмрд╛рдж, рд╕рднреА рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд╕реНрддреБрдПрдВ рдЬреЛ рджреВрд╕рд░реЗ рддрд░реНрдХ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдереАрдВ
рдЬреЛ рдкрд╣рд▓реЗ рддрд░реНрдХ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ "main.o" "main.cpp" рд╕реЗ рдЖрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ "my_class.h" рд╢рд╛рдорд┐рд▓ рд╣реИред
"$(infer_objects)" "my_class.o" рдирд╛рдо рд╡рд╛рд▓реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдмрд┐рд▓реНрдХреБрд▓ рдРрд╕рд╛ рд╣реА рдПрдХ
рдлрд╝рд╛рдЗрд▓ рдорд┐рд▓ рдЧрдИ рд╣реИ, рдЗрд╕реЗ рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред (рдпрджрд┐ рджреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЗрдВ "my_class.o" рдкрд╛рдИ рдЬрд╛рддреА рд╣реИрдВ
рд╡рд┐рднрд┐рдиреНрди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ, рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рд╕рдВрджреЗрд╢ рдореБрджреНрд░рд┐рдд рд╣реЛрддрд╛ рд╣реИред) "infer_objects" рднреА
рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП "my_class.cpp" рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рдХреНрдпрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдФрд░ рдХреМрди рд╕реА рдЕрддрд┐рд░рд┐рдХреНрдд рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЗрдВ рд╣реИрдВ
рдирд┐рд╣рд┐рддред
рдПрдордХреЗрдЯреЗрдореНрдк
рдПрдордХреЗрдЯреЗрдореНрдк рдЙрдкрд╕рд░реНрдЧ
рдПрдордХреЗрдЯреЗрдореНрдк рдЙрдкрд╕рд░реНрдЧXXX
mktemp /
рдПрдХ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдЕрд╕реНрдерд╛рдпреА рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред рдХреЛрдИ рдирд╛рдо рдирд╣реАрдВ
рдПрдХ рд╣реА рдлрд╝рд╛рдЗрд▓ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддреЗ рд╣реБрдП рджреЛ рдмрд╛рд░ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рд╛рдкреЗрдХреНрд╖ рдкрдереЛрдВ рдХреЗ рд╕рд╛рде рднреА,
рдПрдХ рдореЗрдХрдк рд░рди рдХреЗ рднреАрддрд░ (рд╕рдВрднрд╡рддрдГ рдкрд╛рд░рдВрдкрд░рд┐рдХ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдореЗрдХ рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдпрд╛ рдпрджрд┐ рдкрд░реНрд▓
рдирд┐рдпрдо рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдЪрд▓рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб "f_mktemp" рдХрд╣рд▓рд╛рддрд╛ рд╣реИ)ред рдореЗрдХрдк рдХреЗ рдЕрдВрдд рдореЗрдВ рд╕рднреА рдЪрд▓рд╛рдПрдБ
рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдИ рдЧрдИ рдлрд╝рд╛рдЗрд▓реЗрдВ рд╣рдЯрд╛ рджреА рдЬрд╛рддреА рд╣реИрдВ, рдпрджрд┐ рд╡реЗ рдореМрдЬреВрдж рд╣реИрдВ (рдлрд┐рд░ рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдЫреЛрдбрд╝рдХрд░)ред
рдПрдХ рдирд┐рдпрдо рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдЪрд▓ рд░рд╣реЗ рдкрд░реНрд▓ рдХреЛрдб рдореЗрдВ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛)ред
рддрд░реНрдХ рдХреЗ рдЕрдВрдд рдореЗрдВ рдЬрд┐рддрдиреЗ рднреА рдмрдбрд╝реЗ рдЕрдХреНрд╖рд░ "X" рд╣реЛрдВ, рдЙрдиреНрд╣реЗрдВ рдЙрддрдиреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЕрдХреНрд╖рд░ рдФрд░ рдЕрдВрдХ. рдЬрд┐рддрдиреЗ рдЕрдзрд┐рдХ рд╣реЛрдВрдЧреЗ, рдЗрд╕рдХреЗ рдЯрдХрд░рд╛рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдЙрддрдиреА рд╣реА рдХрдо рд╣реЛрдЧреА
рдЕрдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк "рдЬреИрд╕реЗ рдЙрдкрд╕рд░реНрдЧ рджреЗрддреЗ рд╣реИрдВ/рдЯреАрдПрдордкреА/рдПрдмреАрд╕реА.", рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
"рдПрдХреНрд╕" рдПрд╕. рдпрджрд┐ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ X рд╣реИрдВ, рддреЛ рдкрд╣рд▓рд╛ рдЕрдХреНрд╖рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЖрдИрдбреА рд╕реЗ рдЖрддрд╛ рд╣реИред рдЕрдЧрд░
рд╡рд╣рд╛рдБ рдХреЛрдИ рднреА рдирд╣реАрдВ рд╣реИ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдорд╛рдиреЛ рджрд╕ рдереЗ, рдЬреЛ рдХрдерд┐рдд рддреМрд░ рдкрд░ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ (8.4e17)ред
рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рдпрд╛ рд╡рд┐рдВрдбреЛрдЬрд╝ рдкрд░ 3.7e15)ред рдпрджрд┐ рдХреЛрдИ рддрд░реНрдХ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЙрдкрд╕рд░реНрдЧ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ
"рдЯреАрдПрдордкреА."рд╡рд░реНрддрдорд╛рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ.
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЖрдк рдирд┐рдпрдо рд▓рдХреНрд╖реНрдп рдФрд░ рдирд┐рд░реНрднрд░рддрд╛ рдЬреИрд╕рд╛ рдХреЛрдИ рдирд╛рдо рдирд╣реАрдВ рджреЗрдирд╛ рдЪрд╛рд╣рддреЗред
рдкрд░рд┐рдгрд╛рдо рд╕рд╣реА рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЬрдм рднреА рдЖрдк рдореЗрдХрдк рдЪрд▓рд╛рдПрдВрдЧреЗ рддреЛ рдЗрд╕реЗ рджреЛрдмрд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╕рд╛рде рд╣реА, рдЪреВрдВрдХрд┐ рдпрд╣ рд╣рдореЗрд╢рд╛ рдЕрд▓рдЧ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд┐рдпрдо рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рддрднреА рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ
":рдмрд┐рд▓реНрдб_рдЪреЗрдХ рдЗрдЧреНрдиреЛрд░_рдПрдХреНрд╢рди":
TMPFILE ;= $(mktemp) # 1 рдХреЙрд▓; "= рдХрд╛ рдЕрд░реНрде рд╣реЛрдЧрд╛ 3 рдХреЙрд▓: 3 рдлрд╝рд╛рдЗрд▓реЗрдВ
рдП-рдЧрд┐рдирддреА рдмреА-рдЧрд┐рдирддреА: :build_checkignore_action
рдЙрддреНрдкрд╛рджрди-рдЬреИрд╕рд╛-рдФрд░-рдмреАрдПрд╕ >$(TMPFILE)
&grep -c /A/ $(TMPFILE) -o A-рдЧрд┐рдирддреА
&grep -c /B/ $(TMPFILE) -o B-рдЧрд┐рдирддреА
рдпрд╛ рдЖрдкрдХреЛ рдЗрд╕реЗ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╢реЗрд▓ рдХреЛ рдЗрд╕рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП:
рдирд┐рд░реНрдпрд╛рдд TMPFILE ;= $(mktemp)
рдП-рдЧрд┐рдирддреА рдмреА-рдЧрд┐рдирддреА:
product-As-and-Bs >$$TMPFILE # рдореЗрдХрдк рдХреЛ var рдорд╛рди рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИ
fgrep -c A $$TMPFILE >A-рдЧрд┐рдирддреА
fgrep -c B $$TMPFILE >B-рдЧрд┐рдирддреА
рдЕрдВрддрд┐рдо рдлреЙрд░реНрдо рдкрд┐рдЫрд▓реЗ рд░рд┐рдЯрд░реНрди рдорд╛рди рдХреЛ рджреЛрд╣рд░рд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдЗрд╕реЗ рдкреИрдЯрд░реНрди рдирд┐рдпрдо рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
%x: %y
&grep foo $(рдЗрдирдкреБрдЯ) -o $(mktemp)
&sed bar $(mktemp /) -o $(рдЖрдЙрдЯрдкреБрдЯ) # &grep рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рдХрд╛рдо рдХрд░реЗрдВ
notdir рдлрд╝рд╛рдЗрд▓ рдирд╛рдо
рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХрд╛ рдЧреИрд░-рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рднрд╛рдЧ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдпрд╛рдиреА, рдЕрдВрддрд┐рдо рдХреЗ рдмрд╛рдж рд╕рдм рдХреБрдЫ
рдпрджрд┐ рдХреЛрдИ рд╣реИ рддреЛ рд╕реНрд▓реИрд╢ рдХрд░реЗрдВ, рдЕрдиреНрдпрдерд╛ рд╕рдВрдкреВрд░реНрдг рдлрд╝рд╛рдЗрд▓ рдирд╛рдоред
рдХреЗрд╡рд▓_рдЙрддреНрдкрдиреНрди рдлрд╝рд╛рдЗрд▓ рдирд╛рдо
рд╕реВрдЪреА рдореЗрдВ рдХреЗрд╡рд▓ рд╡реЗ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬреЛ рдореЗрдХрдк рджреНрд╡рд╛рд░рд╛ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдереЗ, рдЙрд╕рдХреЗ рдмрд╛рдж рд╕реЗ рдирд╣реАрдВ
рдмрд┐рд▓реНрдб рдЬрд╛рдирдХрд╛рд░реА рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдВрд╢реЛрдзрд┐рддред
рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рд╕реНрд╡рдЪреНрдЫ рд▓рдХреНрд╖реНрдп рдирд┐рдпрдореЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реИ (рд╣рд╛рд▓рд╛рдБрдХрд┐ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ "makeppclean" рд╣реИ
рдкрд╕рдВрджреАрджрд╛ рд╕рдВрд╕реНрдХрд░рдг):
$ (рдлреЛрдиреА рдХреНрд▓реАрди):
&rm -f $(only_generated **/*)
рдХреЗрд╡рд▓_рд▓рдХреНрд╖реНрдп рдирд╣реАрдВ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо
рд╕реВрдЪреА рдореЗрдВ рдХреЗрд╡рд▓ рд╡реЗ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рднреА рдирд┐рдпрдо рдХрд╛ рд▓рдХреНрд╖реНрдп рдирд╣реАрдВ рд╣реИрдВ (рдпрд╛ рддреЛ)ред
рд╕реНрдкрд╖реНрдЯ рдпрд╛ рдкреИрдЯрд░реНрди рдирд┐рдпрдо)ред рдЖрдк рдПрдХ рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ("$(рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб )" рджреЗрдЦреЗрдВ
рдореЗрдХрдк рдХреЗ рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдкрд░ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди)ред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд┐рддрд░рдг рд▓рдХреНрд╖реНрдп:
.рдлреЛрдиреА: рд╡рд┐рддрд░рдг
рд╡рд┐рддрд░рдг:
&mkdir our_product-$(рд╕рдВрд╕реНрдХрд░рдг)
&cp $(рдлрд╝рд┐рд▓реНрдЯрд░-рдЖрдЙрдЯ %~, $(only_nontargets *)) our_product-$(рд╕рдВрд╕реНрдХрд░рдг)
рдЯрд╛рд░ рд╕реАрдПрдл - our_product-$(рд╕рдВрд╕реНрдХрд░рдг) | gzip -9c > our_product-$(VERSION).tar.gz
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, "$(only_nontargets *)" рд╡рд░реНрддрдорд╛рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рд╛рдЗрд▓ рд▓реМрдЯрд╛рддрд╛ рд╣реИ
рд╡рд╣ рдХрд┐рд╕реА рдирд┐рдпрдо рдХрд╛ рд▓рдХреНрд╖реНрдп рдирд╣реАрдВ рд╣реИ. "$(filter_out %~, ...)" рд╕рдВрдкрд╛рджрдХ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ
рдмреИрдХрдЕрдкред
"only_targets" (рдКрдкрд░ рджреЗрдЦреЗрдВ) рдХреЗ рд╕рдорд╛рди, "only_nontargets" рдХреЗрд╡рд▓ рдЙрди рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддрд╛ рд╣реИ рдЬреЛ
рдкрд╣рд▓реЗ рд╣реА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдпрджрд┐ рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВ
":=" рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЗ рд╕рд╛рде; рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдирд┐рд░реНрднрд░рддрд╛ рд╕реВрдЪреА рдореЗрдВ рдпрд╛ рдХрд┐рд╕реА рдХреЗ рдореБрдЦреНрдп рднрд╛рдЧ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ
рдирд┐рдпрдо, рдЕрдиреНрдп рд╕рднреА рдирд┐рдпрдо рдкрд╣рд▓реЗ рд╣реА рджреЗрдЦреЗ рдЬрд╛ рдЪреБрдХреЗ рд╣реЛрдВрдЧреЗред
рдХреЗрд╡рд▓_рдмрд╛рд╕реА рдлрд╝рд╛рдЗрд▓ рдирд╛рдо
рд╕реВрдЪреА рдореЗрдВ рдХреЗрд╡рд▓ рд╡реЗ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬреЛ рдореЗрдХрдк рджреНрд╡рд╛рд░рд╛ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдереЗ, рдЙрд╕рдХреЗ рдмрд╛рдж рд╕реЗ рдирд╣реАрдВ
рдмрд┐рд▓реНрдб рдЬрд╛рдирдХрд╛рд░реА рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдВрд╢реЛрдзрд┐рдд, рд▓реЗрдХрд┐рди рдЕрдм рдХрд┐рд╕реА рднреА рдирд┐рдпрдо рдХрд╛ рд▓рдХреНрд╖реНрдп рдирд╣реАрдВ рд╣реИрдВред
рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ рдХрд┐ рдРрд╕реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдкрд░ рдХреЛрдИ рдирд┐рд░реНрднрд░рддрд╛ рдирд╣реАрдВ рд╣реИ,
рд╕рднреА рд▓рдХреНрд╖реНрдпреЛрдВ рдХрд╛ рд╕рд╛рдлрд╝-рд╕реБрдерд░рд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдП рдмрд┐рдирд╛:
$(рдлрдиреА рдлреНрд▓рд╢):
&rm -f $(only_stale **/*)
рдЕрд╕рд▓ рдореЗрдВ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╢рд╛рдпрдж рдРрд╕реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ рдЬреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрдХрдк рдХреЛ рдХреЙрд▓ рдХрд░реЗ
рдкреБрд░рд╛рдиреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА, рдФрд░ рдлрд┐рд░ рдЙрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рд╕рднреА рд╕реВрдЪреАрдмрджреНрдз рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ
рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕реНрд░реЛрдд рдирд┐рдпрдВрддреНрд░рдг рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВ, рдпрджрд┐ рдХреЛрдИ рдЬреЗрдирд░реЗрдЯ рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рд╕реНрд░реЛрдд рдмрди рдЬрд╛рддреА рд╣реИ
рдлрд╝рд╛рдЗрд▓ред Makepp рдореЗрдВ рдРрд╕рд╛ рдХреЛрдИ рдлрд╝рдВрдХреНрд╢рди рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ makepp рд╣реИ (рдФрд░ рд╢рд╛рдпрдж
рд╕реНрд░реЛрдд рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдЬреНрдЮреЗрдпрд╡рд╛рджреА рдмрдиреЗ рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдХреЗрд╡рд▓_рд▓рдХреНрд╖реНрдп рдлрд╝рд╛рдЗрд▓ рдирд╛рдо
рд╕реВрдЪреА рдореЗрдВ рдХреЗрд╡рд▓ рд╡реЗ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рд╕реА рдирд┐рдпрдо рдХреЗ рд▓рдХреНрд╖реНрдп рд╣реИрдВ
(рдпрд╛ рддреЛ рд╕реНрдкрд╖реНрдЯ рдпрд╛ рдкреИрдЯрд░реНрди рдирд┐рдпрдо)ред рдЖрдк рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдореЗрдХрдк рд╕рд╣рд┐рдд)ред
рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб, "**")ред (рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП "$(рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб )" рдлрд╝рдВрдХреНрд╢рди рджреЗрдЦреЗрдВ
рд╡рд┐рд╡рд░рдгред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрд╡рдЪреНрдЫ рд▓рдХреНрд╖реНрдп рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
.рдлреЛрдиреА: рд╕рд╛рдлрд╝
рд╕реНрд╡рдЪреНрдЫ:
&rm -f $(only_targets *)
рдЕрдм рдпрджрд┐ рдЖрдк "рдореЗрдХрдПрдк рдХреНрд▓реАрди" рдЯрд╛рдЗрдк рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╡рд╣ рд╕рдм рдХреБрдЫ рд╣рдЯрд╛ рджреЗрдЧрд╛ рдЬреЛ рдЗрд╕реЗ рдмрдирд╛рдирд╛ рдЖрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди
рд╕рд╛рдлрд╝ рд▓рдХреНрд╖реНрдп рди рдмрдирд╛рдПрдВ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп "makeppclean" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ!
рдПрдХ рдЕрдиреНрдп рд╕реНрдерд╛рди рдЬрд╣рд╛рдВ рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рд╡рд╣ рд╣реИ рдмрд╛рд╕реА рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдирд╛ .o рдЖрдкрдХреА рдлрд╝рд╛рдЗрд▓реЗрдВ
рдирд┐рд░реНрдорд╛рдгред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдЗрд╕ рддрд░рд╣ рдПрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрдирд╛рддреЗ рд╣реИрдВ:
mylib.a: *.o
рдФрд░ рдЖрд░рдПрдо-рдПрдл $ (рдЖрдЙрдЯрдкреБрдЯ)
$(AR) рдХрд░реЛрдбрд╝ $(рдЖрдЙрдЯрдкреБрдЯ) $(рдЗрдирдкреБрдЯ)
рдФрд░ рдлрд┐рд░ рдЖрдк рдХреБрдЫ рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЗрдВ рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рд╕рдВрдмрдВрдзрд┐рдд рдлрд╝рд╛рдЗрд▓реЗрдВ рд╣рдЯрд╛рдирд╛ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ .o рдлрд╝рд╛рдЗрд▓реЗрдВ,
la .o рдлрд╝рд╛рдЗрд▓реЗрдВ рдЕрднреА рднреА рдЖрд╕рдкрд╛рд╕ рд░рд╣реЗрдВрдЧреА. рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЕрднреА рднреА рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЕрдм рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЕрдкрдирд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ
рдЗрд╕ рддрд░рд╣ рдирд┐рдпрдо рдмрдирд╛рдПрдВ:
mylib.a: $(only_targets *.o)
рдФрд░ рдЖрд░рдПрдо-рдПрдл $ (рдЖрдЙрдЯрдкреБрдЯ)
$(AR) рдХрд░реЛрдбрд╝ $(рдЖрдЙрдЯрдкреБрдЯ) $(рдЗрдирдкреБрдЯ)
рддреЛ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реЛрдЧреА.
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдЙрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рд▓рдХреНрд╖реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ at la рдкрд╣рд░ рдЗрд╕рд▓рд┐рдП рдЖрдк
рдЖрд╣реНрд╡рд╛рди "рдХреЗрд╡рд▓-рд▓рдХреНрд╖реНрдп"ред рдпрджрд┐ "only_targets" рдирд┐рд░реНрднрд░рддрд╛ рдпрд╛ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИ
рдирд┐рдпрдо, рддреЛ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд▓рдХреНрд╖реНрдп рдЬреНрдЮрд╛рдд рд╣реЛрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рдФрд░ рдХреНрд░рд┐рдпрд╛рдПрдБ рдирд╣реАрдВ рд╣реИрдВ
рдирд┐рдпрдо рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рддрдХ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рдЖрдк рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЗрд╕рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ
рдореЗрдХрдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрд╣рд▓реЗ рдЗрд╕ рддрд░рд╣ рдПрдХ ":=" рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЗ рд╕рд╛рде:
рд╕рднреА_рд▓рдХреНрд╖реНрдп := $(рдХреЗрд╡рд▓_рд▓рдХреНрд╖реНрдп *)
рд▓рдХреНрд╖реНрдп1: рдирд┐рд░реНрднрд░рддрд╛1
рдХрд╛рд░реНрд░рд╡рд╛рдИ
рд▓рдХреНрд╖реНрдп2: рдирд┐рд░реНрднрд░рддрд╛2
рдХрд╛рд░реНрд░рд╡рд╛рдИ
рддреЛ "only_targets" рдХреЛ рдЕрдЧрд▓реЗ рдирд┐рдпрдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдирд╣реАрдВ рдЪрд▓реЗрдЧрд╛ред
рдЗрд╕реА рддрд░рд╣, "only_targets" рдХреЛ рдореЗрдХрдлрд╝рд╛рдЗрд▓реНрд╕ рдореЗрдВ рдЙрддреНрдкрд╛рджрд┐рдд рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ
рдкреБрдирд░рд╛рд╡рд░реНрддреА рдореЗрдХ рд╕реЗ рднрд░рд╛ рд╣реБрдЖред (рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рд╡реИрд╕реЗ рднреА рдкреБрдирд░рд╛рд╡рд░реНрддреА рдореЗрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП; рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рдЗрд╕рдХреЗ рдмрдЬрд╛рдп "load_makefile" рдХрдерди рдпрд╛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдореЗрдХрдлрд╝рд╛рдЗрд▓ рд▓реЛрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред)
рд╕рд╛рдкреЗрдХреНрд╖_рдлрд╝рд╛рдЗрд▓рдирд╛рдо file1 file2 рдлрд╝рд╛рдЗрд▓3[, рд╕реНрд▓реИрд╢]
рд╡рд░реНрддрдорд╛рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЙрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдирд╛рдо рд▓реМрдЯрд╛рддрд╛ рд╣реИ (рд╡рд╣реА рдЬреЛ
рдореЗрдХрдлрд╝рд╛рдЗрд▓ рдЕрдВрджрд░ рд╣реИ)ред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдирд╛рд╡рд╢реНрдпрдХ "./" рдФрд░ рдЕрдиреНрдп рдХрдмрд╛рдбрд╝ рдХреЛ рд╕рд╛рдл рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
рдорд╛рд░реНрдЧ:
рдбреАрдЖрдИрдЖрд░ := .
рдЙрдкрджрд┐рд░ := ..
FNAME := $(DIR)/../otherdir/$(SUBDIR)/рдлрд╝рд╛рдЗрд▓реЗрдВ
рдПрдХреНрд╕ := $(relative_filename $(FNAME))
If рдХрдбрд╝реА рдЖрд▓реЛрдЪрдирд╛ рдХрд░рдирд╛ рд╕рддреНрдп рд╣реИ (рдЖрдорддреМрд░ рдкрд░ 1) рд▓реМрдЯрд╛рдП рдЧрдП рдлрд╝рд╛рдЗрд▓ рдирд╛рдореЛрдВ рдореЗрдВ рд╕реНрд▓реИрд╢ рд╣реЛрдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рд╣реЛрддреА рд╣реИ
рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ "./" рдЬреЛрдбрд╝рдХрд░, рддрд╛рдХрд┐ рдЖрдк рдЗрд╕реЗ рдмрд┐рдирд╛ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗрдВ
рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реНрдерд╛рди рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрдорд╛рдВрдб рдЦреЛрдЬ рдкрде рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдирд╛ред
рдпрджрд┐ рдкрде рд░реВрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╛ рддреЛ рдЖрдкрдХреЗ рд╣реЛрдо рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХрд╛ рдореВрд▓ рдпрд╛
рдЖрдкрдХреЗ рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рдХрд╛ "$(ROOT)", рдпрд╛ рд╡рд┐рдВрдбреЛрдЬрд╝ рдкрд░ рдбреНрд░рд╛рдЗрд╡ рдХрд╛ рд░реВрдЯ (рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ)ред
рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рд▓рд┐рдП рднреА рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ /рд╕рд╛рдЗрдЧрдбреНрд░рд╛рдЗрд╡/рд╕реА or /c), рдПрдХ рдкреВрд░реНрдг рдкрде рд╣реЛрдЧрд╛
рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд▓реМрдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ред
рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ file1 file2 рдлрд╝рд╛рдЗрд▓3[, рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛]
рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЙрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдирд╛рдо рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдпрд╣ рд╣реИ
рдЖрдо рддреМрд░ рдкрд░ рддрдм рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдХрд┐рд╕реА рднреА рдХрд╛рд░рдг рд╕реЗ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдХрдорд╛рдВрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИ
рднрд┐рдиреНрди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡рд░реНрддрдорд╛рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛):
source_backup.tar:
рд╕реАрдбреА .. && рдЯрд╛рд░ рд╕реАрдПрдл $(рд╕рд╛рдкреЗрдХреНрд╖_рд╕реЗ $(рдЖрдЙрдЯрдкреБрдЯ), ..) $(рд╕рд╛рдкреЗрдХреНрд╖_рд╕реЗ ., ..)
рдкреНрд░рддреНрдпрдп рдирд╛рдо...
рдирд╛рдореЛрдВ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХрд╛ рдкреНрд░рддреНрдпрдп рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИред рдпрджрд┐ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдореЗрдВ рдХреЛрдИ рдЕрд╡рдзрд┐ рд╣реИ,
рдкреНрд░рддреНрдпрдп рд╡рд╣ рд╕рдм рдХреБрдЫ рд╣реИ рдЬреЛ рдЕрдВрддрд┐рдо рдЕрд╡рдзрд┐ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдЕрдиреНрдпрдерд╛, рдкреНрд░рддреНрдпрдп рд╣реИ
рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧред рдЗрд╕рдХрд╛ рдЕрд░реНрде рдЕрдХреНрд╕рд░ рдпрд╣ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдирд╛рдо рди рд╣реЛрдиреЗ рдкрд░ рдкрд░рд┐рдгрд╛рдо рд░рд┐рдХреНрдд рд╣реЛрдЧрд╛,
рдФрд░ рдпрджрд┐ рдирд╛рдореЛрдВ рдореЗрдВ рдПрдХрд╛рдзрд┐рдХ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рд╣реИрдВ, рддреЛ рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рдХрдо рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
$(рдкреНрд░рддреНрдпрдп src/foo.c src-1.0/bar.c рд╣реИрдХреНрд╕)
рдкрд░рд┐рдгрд╛рдо ".c .c" рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред
рдЕрд╕реНрдерд╛рдпреА рд╢рдмреНрдж
рдореЗрдХрдк рдХреЛ рдмрддрд╛рдПрдВ рдХрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд▓рдХреНрд╖реНрдп рдЙрддреНрдкрдиреНрди рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдирд┐рдпрдо рджреНрд╡рд╛рд░рд╛ рд╣рдЯрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ
рдЙрдиреНрд╣реЗрдВред "рдлрдиреА" рдХреЗ рд╕рдорд╛рди, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдореЗрдХрдк рдЙрд╕ рдирд╛рдо рдХреА рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдлрд╝рд╛рдЗрд▓ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ
рдирд┐рдпрдо рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ. рдХреЛрдИ рдирд┐рдпрдо рдХреЗрд╡рд▓ рдЕрд╕реНрдерд╛рдпреА рд╣реЛрдиреЗ рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ
рд▓рдХреНрд╖реНрдп рдкреБрд░рд╛рдиреЗ рд╣реЛ рдЪреБрдХреЗ рд╣реИрдВ.
рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдкреИрдЯрд░реНрди
рджрд┐рдП рдЧрдП рдкреИрдЯрд░реНрди рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рд╡рд╛рд▓реА рд╕рднреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдХреНрд░рдордмрджреНрдз рдирд╛рдо рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЬреЛ рдореМрдЬреВрдж рд╣реИрдВ, рдпрд╛ рд╡реЗ
рдлрд╝рд╛рдЗрд▓реЗрдВ рдЬреЛ рдЕрднреА рддрдХ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИрдВ рд▓реЗрдХрд┐рди рдореЗрдХрдк рджреНрд╡рд╛рд░рд╛ рдЬреНрдЮрд╛рдд рдирд┐рдпрдореЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрдирд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ
рдЙрд╕ рдмрд┐рдВрджреБ рдкрд░ рдЬрдм рдпрд╣ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдЕрдВрддрд┐рдо рдмрд┐рдВрджреБ рдореЗрдВ рдпрд╣ рднрд┐рдиреНрди рд╣реИ
рдирд┐рдпрдо рдЗрдирдкреБрдЯ рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рд╕реЗ, рдЬреЛ рдмрд╛рдж рдореЗрдВ рдкрд╛рдП рдЧрдП рдирд┐рдпрдореЛрдВ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдкрд░ рднреА рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред
Makepp рд╕рднреА рд╕рд╛рдорд╛рдиреНрдп рд╢реЗрд▓ рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб ("*", "?", рдФрд░ "[]") рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рдПрдХ рднреА рд╣реИ
рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб "**" рдЬреЛ рдХрд┐рд╕реА рднреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░рдиреЗ рд╡рд╛рд▓реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред (рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдерд╛
zsh рд╕реЗ рдЪреБрд░рд╛рдпрд╛ рдЧрдпрд╛ред) рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "**/*.c" рд╕рднреА рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ .c рд╕рдВрдкреВрд░реНрдг рд╕реНрд░реЛрдд рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЗрдВ
рдкреЗрдбрд╝ред "objects/**/*.o" рд╕рднреА рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ .o рдлрд╝рд╛рдЗрд▓реЗрдВ рдХрд╣реАрдВ рднреА рдореМрдЬреВрдж рд╣реИрдВ
рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╡рд╕реНрддреБрдУрдВ рдпрд╛ рдЗрд╕рдХреА рдХреЛрдИ рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдпрд╛ рдЙрдирдХреА рдХреЛрдИ рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ред
"**" рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдХрд┐рд╕реА рднреА рд╕реНрддрд░ рдкрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕реЙрдлреНрдЯ рд▓рд┐рдВрдХ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рди рд╣реА рдХрд░реЗрдЧрд╛
рдЙрди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рджрд░реНрдЬ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдЬреЛ рдореМрдЬреВрдж рд╣реИрдВ рд▓реЗрдХрд┐рди рдкрдврд╝реА рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддреАрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдлрд╝рд╛рдЗрд▓реЗрдВ рдФрд░
рдЬреЛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдПрдБ рдореМрдЬреВрдж рд╣реИрдВ рд▓реЗрдХрд┐рди рдкрдврд╝реА рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддреАрдВ рдЙрдиреНрд╣реЗрдВ "$(рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб)" рджреНрд╡рд╛рд░рд╛ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рддрд╛рд░ рдХрд╛рд░реНрдп
рдЙрдкрд╕рд░реНрдЧ рдЬреЛрдбрд╝реЗрдВ рдЙрдкрд╕рд░реНрдЧ, рд╢рдмреНрдж
рдкреНрд░рддреНрдпреЗрдХ рд╢рдмреНрдж рдХреЗ рд╕рд╛рде рдЙрдкрд╕рд░реНрдЧ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдпрд╣ рдЕрдзрд┐рдХрддрд░ рдЬреАрдПрдирдпреВ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рд╣реИ
рдЕрдиреБрдХреВрд▓рддрд╛; рдЖрд░рд╕реА-рд╢реИрд▓реА рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЗрд╕реЗ рдЕрдзрд┐рдХ рдкрдардиреАрдп рддрд░реАрдХреЗ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
рдЗрд╕ рддрд░рд╣:
рдореЙрдбреНрдпреВрд▓:= рдП рдмреА рд╕реА рдбреА
X_OLD_STYLE := $(addprefix $(OBJDIR)/, $(addsuffix .o, $(MODULES)))
X_NEW_STYLE := $(OBJDIR)/$(MODULES).o # рдХреНрдпрд╛ рдЗрд╕реЗ рдкрдврд╝рдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ?
addsuffix рдкреНрд░рддреНрдпрдп, рд╢рдмреНрдж
рдкреНрд░рддреНрдпреЗрдХ рд╢рдмреНрдж рдореЗрдВ рдкреНрд░рддреНрдпрдп рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдпрд╣ рдЕрдзрд┐рдХрддрд░ рдЬреАрдПрдирдпреВ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рд╣реИ
рдЕрдиреБрдХреВрд▓рддрд╛; рдЖрд░рд╕реА-рд╢реИрд▓реА рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЗрд╕реЗ рдЕрдзрд┐рдХ рдкрдардиреАрдп рддрд░реАрдХреЗ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
рдЗрд╕ рддрд░рд╣:
X_OLD_STYLE := $(addsuffix .o, $(MODULES))
X_NEW_STYLE := $(рдореЙрдбреНрдпреВрд▓).o
рдХреЙрд▓ рдЪрд░[, рд╢рдмреНрдж]...
рдлрд╝рдВрдХреНрд╢рди "рдХреЙрд▓" рдЗрд╕ рдорд╛рдпрдиреЗ рдореЗрдВ рдЕрджреНрд╡рд┐рддреАрдп рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдореНрдорд╛рди рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ
рдкреИрд░рд╛рдореАрдЯрд░рдпреБрдХреНрдд рдлрд╝рдВрдХреНрд╢рди. рдЖрдк рдПрдХ рдЬрдЯрд┐рд▓ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкреИрд░рд╛рдореАрдЯрд░рдпреБрдХреНрдд рд╡рд┐рднрд┐рдиреНрди рдорд╛рдиреЛрдВ рддрдХ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рдХреЙрд▓ рдХрд░реЗрдВ"ред рд╢рдмреНрдж рдмрд╛рдж рдореЗрдВред рдореЗрдВ
рдЕрдиреНрдп рдореЗрдХ рд╕рд┐рд╕реНрдЯрдо, рдПрдХ рд╡реЗрд░рд┐рдПрдмрд▓ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
"рдХреЙрд▓" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдореИрдХреНрд░реЛ.
рдореИрдХреНрд░реЛ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рджреМрд░рд╛рди, рдЕрд╕реНрдерд╛рдпреА рдЪрд░ $1, $2, "..." рдХреЛ рджреЗрдЦреЗрдВ
рдЗрд╕рдХреЗ рдЖрд╣реНрд╡рд╛рди рдХреЗ рджреМрд░рд╛рди "рдХреЙрд▓" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджрд┐рдП рдЧрдП рддрд░реНрдХред рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ $0 рддрдХ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
рдореИрдХреНрд░реЛ рдХрд╛ рдирд╛рдо (рдЕрд░реНрдерд╛рддреН) рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓) рд╡рд╣ "рдХреЙрд▓" рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╣реЛ рд░рд╣рд╛ рд╣реИред
рдХрд┐рд╕реА рдореИрдХреНрд░реЛ рдХреЛ рдХрд┐рддрдиреЗ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде "рдХреЙрд▓" рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдХрд┐рддрдиреЗ рддрд░реНрдХ рджрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рдХреА рдХреЛрдИ рд╕реАрдорд╛ рдирд╣реАрдВ рд╣реИ
рдПрдХ рдореИрдХреНрд░реЛ рдЬрд┐рди рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдореИрдХреНрд░реЛ рдХреЗ рд░реВрдк рдореЗрдВ "рдХреЙрд▓" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рддрд░реНрдХ рдкрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ
рдЖрд╡рд╢реНрдпрдХрддрд╛, рд╕рднреА рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реНрдХ рдЦрд╛рд░рд┐рдЬ рдХрд░ рджрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рдпрджрд┐ рдЖрдк a рд╕реЗ рдХрдо рддрд░реНрдХ рдкрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ
рдореИрдХреНрд░реЛ рдЕрдкреЗрдХреНрд╖рд╛, рд╕рднреА рдЕрддрд┐рд░рд┐рдХреНрдд рдкреИрд░рд╛рдореАрдЯрд░ рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдврд╣ рдЬрд╛рддреЗ рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг:
рдмрд╛рдХреА = $(рд╢рдмреНрджрд╕реВрдЪреА 2, $(рд╢рдмреНрдж $(1)),$(1))
рд╕реВрдЪреА = рдП рдмреА рд╕реА рдбреА рдИ
рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ := $(рдмрд╛рдХреА рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ,$(рд╕реВрдЪреА))
рдпрд╣рд╛рдВ, рд╡реЗрд░рд┐рдПрдмрд▓ "$(butfirst)" рдореЗрдВ "B C D E" рд╕реВрдЪреА рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧреАред
рдФрд░ рдЕрдм рдПрдХ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рд╕рдВрднрд╡ рд╣реИ:
рдмрд╛рдХреА = $(рд╢рдмреНрджрд╕реВрдЪреА 2,$(рд╢рдмреНрдж $(1)),${1})
рдорд╛рдпрдореИрдк = $(рдпрджрд┐ $2,$(рдХреЙрд▓ $1,$(рдлрд░реНрд╕реНрдЯрд╡рд░реНрдб $2)) $(рдХреЙрд▓ $0,$1,$(рдХреЙрд▓ рдмрд╛рдХреА,$2)))
рдбрд╛рдЙрдирдХреЗрд╕ = ${рдореЗрдХрдкрд░рд▓ рдПрд▓рд╕реА('$1')}
UCрд╢рдмреНрдж = рдпреЗ рд╕рднреА рд╢рдмреНрдж рдЕрдкрдХреЗрд╕ рд╣реИрдВ
DCWORDS := $(рдХреЙрд▓ mymap,downcase,$(UCWORDS))
рдЕрдм "$(DCWORDS)" рдореЗрдВ "рдпреЗ рд╕рднреА рд╢рдмреНрдж upcase рд╣реИрдВ"ред рд╡реИрд╕реЗ: рдпрд╣ рдирд╣реАрдВ рдмрдирд╛рддрд╛ рд╣реИ
рдЕрдВрддрд░, рдЪрд╛рд╣реЗ рд╣рдо рддрд░реНрдХреЛрдВ рддрдХ рдкрд╣реБрдБрдЪреЗрдВ $1, "${1}" or "$(1)" рдПрдХ рдореИрдХреНрд░реЛ рдХреЗ рднреАрддрд░.
рдпрджрд┐ рдХреЛрдИ рдЪрд░ рдирд╣реАрдВ рд╣реИ рддреЛ рдЖрдк рд╕реАрдзреЗ рд╡реЗрд░рд┐рдПрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдерд╛
рдЙрд╕ рдирд╛рдо рдХрд╛ рдХрд╛рд░реНрдп. рдЗрд╕реЗ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ "рдХреЙрд▓" рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпреЗ рд╣реИрдВ
рд╕рдордХрдХреНрд╖:
рдЪрд░реНрдЪрд╛ = $0 $1 $2 рдореЗрдВ рдмрджрд▓ рдЧрдпрд╛ред
рдкреНрд░рддреНрдпрдХреНрд╖ = $(рдЪрд░реНрдЪрд╛ рдФрд░ рддрд░реНрдХ)
рдмреБрд▓рд╛рдпрд╛ = $(рдХреЙрд▓ рдЪрд░реНрдЪрд╛, рдПрдХ, рддрд░реНрдХ)
рдпрд╣ рдмрд╣рд╕ рдХрд╛ рд╡рд┐рд╖рдп рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ "$[call]" рдХреЛ рдореИрдХреНрд░реЛ рдХреЗ "$[]" рдХрд╛ рднреА рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП
рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ, рдпрд╛ рдХреНрдпрд╛ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╣рдореЗрд╢рд╛ рдПрдХ рд╣реА рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЪрд╛рд╣реЗ рд╡рд╣ рдХреИрд╕рд╛ рднреА рд╣реЛ
рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдмрд╛рдж рд╡рд╛рд▓реЗ рдХреЛ рдЪреБрдирд╛ рдЧрдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рдореЗрдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде рдпрд╣ рд╣реЛрдЧрд╛
"$[1], $[2]..." рдХреЛ рдПрдХ рд╡реЗрд░рд┐рдПрдмрд▓ рдореЗрдВ рд▓рд╛рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ (рдЙрдиреНрд╣реЗрдВ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рд╕реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛,
рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдкреВрд░рд╛ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣реАред) рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдореИрдХреНрд░реЛ рд╣реИ
рдирд┐рдпрдо, рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдирд┐рдпрдо рдХреЗ рдкрд╛рд░реНрд╕ рд╣реЛрдиреЗ рдкрд░ "$(рдЖрдЙрдЯрдкреБрдЯ)" рдЬреИрд╕реЗ рднрд╛рд╡ рджрд┐рдЦреЗрдВ, рдЗрд╕рд▓рд┐рдП
рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ "рдХреЙрд▓" рд╕реЗ рдмрдЪрд╛рдирд╛ рд╣реЛрдЧрд╛:
рдорд╛рдпрд░реВрд▓ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ
$2: $1
рдорд╛рдпрдХрдорд╛рдВрдб $$(рдЗрдирдкреБрдЯ) -рдУ $$(рдЖрдЙрдЯрдкреБрдЯ)
рдПрдВрдбреАрдл
$[рдорд╛рдпрд░реВрд▓ рдорд╛рдпрдЗрдирдкреБрдЯ,рдорд╛рдпрдЖрдЙрдЯрдкреБрдЯ]
рдлрд╝рд┐рд▓реНрдЯрд░ рдкреИрдЯрд░реНрди, рд╢рдмреНрдж
рд╕реВрдЪреА рдореЗрдВ рдкреИрдЯрд░реНрди рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рд╢рдмреНрдж рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдкреИрдЯрд░реНрди рдмрд┐рд▓реНрдХреБрд▓ рдЕрд▓рдЧ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ
рд╢рдмреНрдж, рдпрд╛ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб (рдпрд╛рдиреА, "*", "?", рдФрд░ "[рдП-рдЬреЗрдб]" рдкрд╣рдЪрд╛рдиреЗ рдЬрд╛рддреЗ рд╣реИрдВ), рдпрд╛ рд╡реЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ
рдПрдХ "%" рд╡рд░реНрдг рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рдЙрд╕ рдмрд┐рдВрджреБ рдкрд░ рдХрд┐рд╕реА рднреА рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗ рдореЗрд▓ рдЦрд╛рдирд╛ рд╣реИ ("*" рдХреЗ рд╕рдорд╛рди)ред
рдлрд┐рд▓реНрдЯрд░ рдЦрддрдо рд╣реЛ рдЧрдпрд╛ рдкреИрдЯрд░реНрди, рд╢рдмреНрдж
рд╕реВрдЪреА рдХреЗ рд╕рднреА рд╢рдмреНрдж рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬреЛ рдкреИрдЯрд░реНрди рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреЗред рдкреИрдЯрд░реНрди рдмрд╕ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ
рдЕрдиреНрдп рд╢рдмреНрдж, рдпрд╛ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб (рдпрд╛рдиреА, "*", "?", рдФрд░ "[рдП-рдЬреЗрдб]" рдкрд╣рдЪрд╛рдиреЗ рдЬрд╛рддреЗ рд╣реИрдВ), рдпрд╛
рдЙрдирдореЗрдВ "%" рд╡рд░реНрдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рдЙрд╕ рдмрд┐рдВрджреБ рдкрд░ рдХрд┐рд╕реА рднреА рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗ рдореЗрд▓ рдЦрд╛рдирд╛ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐)ред
"*").
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
libproduction.a: $(filter_out test_*, $(рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб *.o))
рд╕рдм рдбрд╛рд▓ рджреЗрдВрдЧреЗ .o рдРрд╕реА рдлрд╝рд╛рдЗрд▓реЗрдВ рдЬреЛ рдореМрдЬреВрдж рд╣реИрдВ рдпрд╛ рдмрдирд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ, рд╕рд┐рд╡рд╛рдп рд╢реБрд░реБрдЖрдд рд╡рд╛рд▓реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдкрд░реАрдХреНрд╖рдг_,
рдореЗрдВ libproduction.a.
рдлрд╛рдЗрдВрдбрд╕реНрдЯреНрд░рд┐рдВрдЧ рдкрд╛рдирд╛, in
рд╡рд╛рдкрд╕реА рдЦреЛрдЬ, рдпрджрд┐ рдпрд╣ рдХрд╛ рдПрдХ рдЙрдкрд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ in.
рдкрд╣рд▓рд╛ рд╢рдмреНрдж рд╢рдмреНрдж
рдкрд╣рд▓рд╛ рд╢рдмреНрдж рд▓реМрдЯрд╛рдПрдВ.
рдирдХреНрд╢рд╛ рд╢рдмреНрджреЛрдВ, рдкрд░реНрд▓рдХреЛрдб
рдореЗрдХрдореИрдк рд╢рдмреНрджреЛрдВ, рдкрд░реНрд▓рдХреЛрдб
рдЗрд╕реА рддрд░рд╣ рдкрд░реНрд▓ рдХреЗ рдорд╛рдирдЪрд┐рддреНрд░ рдкрд░ рднреА рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ рдкрд░реНрд▓рдХреЛрдб рдкреНрд░рддреНрдпреЗрдХ рд╢рдмреНрдж рдХреЛ рдмрд╛рд░реА-рдмрд╛рд░реА рд╕реЗ рд▓реМрдЯрд╛рддрд╛ рд╣реИ
рдкрд░рд┐рдгрд╛рдоред рдкрд╣рд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг рд╕рд╛рджрд╛ рдкрд░реНрд▓ рдХреЛрдб рд╣реИ, рдЬрдмрдХрд┐ рджреВрд╕рд░рд╛ рд╕рдВрд╕реНрдХрд░рдг рдкрд╣рд▓реЗ рдкрд╛рд╕ рд╣реЛрддрд╛ рд╣реИ
рдореЗрдХ-рд╕реНрдЯрд╛рдЗрд▓ рд╡реИрд░рд┐рдПрдмрд▓ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд░реНрд▓рдХреЛрдбред рджреЛрдиреЛрдВ рдореЗрдВ рд╢рдмреНрджреЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реИ
рдорд╛рдорд▓реЛрдВред
рд╢рдмреНрдж $_ рдореЗрдВ рд╣реИрдВ рдФрд░ рдЬрдм рддрдХ рдЖрдк $_ рдХреЛ рдЕрдирдбрд┐рдл рдирд╣реАрдВ рдХрд░рддреЗ рддрдм рддрдХ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рд╣реИ
рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреЛ "рдкреИрдЯрд╕рдмрд╕реНрдЯ" рджреНрд╡рд╛рд░рд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ред рдХреЗрд╡рд▓ рдкрд╣рд▓рд╛ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рд╡рд┐рднрд╛рдЬрдХ рд╣реИ,
рдХрд┐рд╕реА рдЕрдиреНрдп рдХреЛ рдЗрд╕рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдкрд░реНрд▓рдХреЛрдб.
# рд╢рдмреНрдж рдмрджрд▓реЗрдВ. рдбрдмрд▓ рдкреИрд░реЗрди, рдкрд░реНрд▓рдХреЛрдб рдореЗрдВ рдкреИрд░реЗрди рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╛ ${} рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
рдПрдХреНрд╕ = $((рдорд╛рдирдЪрд┐рддреНрд░ $(рдорд╛рди), s/(.+)-(.+)/$2-$1/))
# рдЖрдк рдореЗрдХ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЖрдкрдХреЛ рдкрд░реНрд▓ $ рдХреЗ рд▓рд┐рдП $$ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
Y = $(makemap $(VALUES), tr/$(OLDCHARS)/$(NEWCHARS)/ рдпрд╛ $$_ = 'рдЕрд╕рдлрд▓')
# рдЖрдк рдЙрдореНрдореАрджрд╡рд╛рд░реЛрдВ рдХреЛ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
Y = $(рдорд╛рдирдЪрд┐рддреНрд░ $(рдорд╛рди), рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд $_ рдпрджрд┐ /рдирд╣реАрдВ_рдЕрдЪреНрдЫрд╛/)
рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рд╢рдмреНрдж1, рд╢рдмреНрдж2
рдкрд╣рд▓реЗ рд╢рдмреНрдж рдФрд░ рджреВрд╕рд░реЗ рд╢рдмреНрдж рдХреЛ рдЬреЛрдбрд╝реАрд╡рд╛рд░ рдЬреЛрдбрд╝реЗрдВред
рдкреИрдЯрд╕рдмрд╕реНрдЯ рдкреИрдЯрд░реНрди, рд╡рд┐рдХрд▓реНрдк, рд╢рдмреНрдж
рд╢рдмреНрдж рд╕реВрдЪреА рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╢рдмреНрдж рдкрд░ рдПрдХ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХрд░рддрд╛ рд╣реИред рдПрдХ "%" рд╡рд░реНрдг рдХрд┐рд╕реА рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ
рдбреЛрд░реАред рдЗрд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреНрд╡рд╛рд░рд╛ рд╕рд░реНрд╡реЛрддреНрддрдо рд░реВрдк рд╕реЗ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
OBJS = $(patsubst %c, object_dir/%.o, $(C_SOURCES))
рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рд╛рдЗрд▓ рдХреЛ C_SOURCES рдореЗрдВ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо object_dir рдореЗрдВ рд▓реМрдЯрд╛рддрд╛ рд╣реИред
рдХрднреА-рдХрднреА рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╕рдВрджрд░реНрдн рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдкрд░реЛрдХреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ
OBJS = $(C_SOURCES:%.c=object_dir/%o)
рддрд░рд╣ word1 word2 word3 ...
рд╢рдмреНрджреЛрдВ рдХреЛ рд╢рд╛рдмреНрджрд┐рдХ рдХреНрд░рдо рдореЗрдВ рдХреНрд░рдордмрджреНрдз рдХрд░рддрд╛ рд╣реИ рдФрд░ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИред
рдкрдЯреНрдЯреА рд╕реНрдЯреНрд░рд┐рдВрдЧ
рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗ рдЕрдЧреНрд░рдгреА рдФрд░ рдЕрдиреБрдЧрд╛рдореА рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреЛ рд╣рдЯрд╛рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдЖрдВрддрд░рд┐рдХ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ
рдПрдХ рд╣реА рд╕реНрдерд╛рди рдХреЗ рд╕рд╛рде рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рд╡рд░реНрдгреЛрдВ рдХрд╛ рдЕрдиреБрдХреНрд░рдоред рдЗрд╕ рдкреНрд░рдХрд╛рд░, "$(рд╕реНрдЯреНрд░рд┐рдк рдП рдмреА
c )" рдХрд╛ рдкрд░рд┐рдгрд╛рдо "a b c" рд╣реЛрддрд╛ рд╣реИред
subst рд╕реЗ, рддрдХ, рдкрд╛рда
рдкрд╛рда рдкрд╛рда рдкрд░ рдПрдХ рдкрд╛рдареНрдп рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХрд░рддрд╛ рд╣реИ: рд╕реЗ рдХреА рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдирд╛ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рдХрд░рдиреЗ рд╕реЗред рдкрд░рд┐рдгрд╛рдо рдХреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
$(рд╡рд┐рдХрд▓реНрдк рдИрдИ,рдИрдИ,рд╕рдбрд╝рдХ рдкрд░ рдкреИрд░)
рд╕реНрдЯреНрд░рд┐рдВрдЧ "fEEt on the strEEt" рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред
рд╢рдмреНрдж рдПрди,рдкрд╛рда
рд▓реМрдЯрддрд╛ рд╣реИ nрдХрд╛ рд╡рд╛рдВ рд╢рдмреНрдж рдЯреЗрдХреНрд╕реНрдЯ. рдХреЗ рд╡реИрдз рдореВрд▓реНрдп n рд╢реБрд░реБрдЖрдд рдореЗрдВ 1 рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ
рдпрд╛ рдЕрдВрдд рдореЗрдВ -1 рд╕реЗ рдкреАрдЫреЗ рдХреА рдУрд░ред рдЕрдЧрд░ n рд╢рдмреНрджреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдмрдбрд╝рд╛ рд╣реИ рдЯреЗрдХреНрд╕реНрдЯ,
рдорд╛рди рд░рд┐рдХреНрдд рд╣реИ.
рд╢рдмреНрдж рд╕реВрдЪреА рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рд╕реВрдЪреА, рд╢рдмреНрдж
рд╢рдмреНрдж рд╕реВрдЪреА рдкреНрд░рдердорд╕реВрдЪрдХрд╛рдВрдХ, рдЕрдВрддрд┐рдорд╕реВрдЪрдХрд╛рдВрдХ, рд╢рдмреНрдж
рдкрд╣рд▓реЗ рдлреЙрд░реНрдо рдореЗрдВ рдЖрдк рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ (рд╢реБрд░реБрдЖрдд рдореЗрдВ 1 рд╕реЗ рдЧрд┐рдирддреА рдХрд░рддреЗ рд╣реБрдП)ред
рдЕрдкрдиреЗ рдЗрдЪреНрдЫрд┐рдд рд╢рдмреНрджреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдВрдд рдореЗрдВ -1 рд╕реЗ рдкреАрдЫреЗ рдХреА рдУрд░) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рджреВрд╕рд░реЗ рд░реВрдк рдореЗрдВ рдЖрдк
рдЙрди рд╢рдмреНрджреЛрдВ рдХреА рд╢реНрд░реЗрдгреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рд▓реМрдЯрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рд╢рдмреНрдж рдЯреЗрдХреНрд╕реНрдЯ
рд╢рдмреНрджреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЯреЗрдХреНрд╕реНрдЯ.
рдХрдИ рддрд░рд╣ рдХрд╛ рдХрд╛рд░реНрдп
рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП var, рд╕реВрдЪреА, рдкрд╛рда
рдкрд╣рд▓реЗ рджреЛ рддрд░реНрдХ, рдерд╛ рдФрд░ рд╕реВрдЪреА, рдХреБрдЫ рднреА рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ; рдЯрд┐рдкреНрдкрдгреА
рдЕрдВрддрд┐рдо рддрд░реНрдХ, рдкрд╛рда, рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдлрд┐рд░ рдкреНрд░рддреНрдпреЗрдХ рд╢рдмреНрдж рдХреЗ рд▓рд┐рдП
рд╕реВрдЪреА рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдорд╛рди, var рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдорд╛рди рджреНрд╡рд╛рд░рд╛ рдирд╛рдорд┐рдд рдЪрд░ рдХреЛ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
рд╡рд╣ рд╢рдмреНрдж, рдФрд░ рдкрд╛рда рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реЛрддрд╛ рд╣реИред рд╕рдВрднрд╡рддрдГ рдкрд╛рда рдореЗрдВ рдЙрд╕ рдЪрд░ рдХреЗ рд╕рдВрджрд░реНрдн рд╢рд╛рдорд┐рд▓ рд╣реИрдВ,
рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╣рд░ рдмрд╛рд░ рдЕрд▓рдЧ рд╣реЛрдЧрд╛ред
рдпрд╣ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╡реЗрд░рд┐рдПрдмрд▓ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕рднреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ
рд╕реВрдЪреА рдореЗрдВ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдПрдБ dirs:
dirs := abcd
рдлрд╝рд╛рдЗрд▓реЗрдВ := $(foreach dir,$(dirs),$(рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб $(dir)/*))
рдпрд╣рд╛рдВ рдЯреЗрдХреНрд╕реНрдЯ "$(рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб $(dir)/*)" рд╣реИред рдкрд╣рд▓реА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдореЗрдВ dir рдХреЗ рд▓рд┐рдП рдорд╛рди "a" рдорд┐рд▓рддрд╛ рд╣реИ,
рдЗрд╕рд▓рд┐рдП рдпрд╣ "$(рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдП/*)" рдЬреИрд╕рд╛ рд╣реА рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ; рджреВрд╕рд░реА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ
"$(рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдмреА/*)" рдХрд╛ рдкрд░рд┐рдгрд╛рдо; рдФрд░ рддреАрд╕рд░рд╛, "$(рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб c/*)" рдХрд╛ред
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рдорд╛рди рд╣реИ ("рдбреАрдЖрдИрдЖрд░" рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛):
рдлрд╝рд╛рдЗрд▓реЗрдВ := $(рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдП/* рдмреА/* рд╕реА/* рдбреА/*)
рдЬрдм рдкрд╛рда рдЬрдЯрд┐рд▓ рд╣реЛ, рддреЛ рдЖрдк рдЙрд╕реЗ рдПрдХ рдирд╛рдо рджреЗрдХрд░ рдкрдардиреАрдпрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдЕрддрд┐рд░рд┐рдХреНрдд рдЪрд░:
find_files = $(рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб $(dir)/*)
dirs := abcd
рдлрд╝рд╛рдЗрд▓реЗрдВ := $(foreach dir,$(dirs),$(find_files))
рдпрд╣рд╛рдВ рд╣рдо рд╡реЗрд░рд┐рдПрдмрд▓ find_files рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо a рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рджреЗ "=" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ
рдкреБрдирд░рд╛рд╡рд░реНрддреА-рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдЪрд░, рддрд╛рдХрд┐ рдЗрд╕рдХреЗ рдорд╛рди рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рд╢рд╛рдорд┐рд▓ рд╣реЛ
foreach рдХреЗ рдирд┐рдпрдВрддреНрд░рдг рдореЗрдВ рдкреБрдирдГ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП; рдПрдХ рд╕рд╛рдзрд╛рд░рдг-рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдЪрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛,
рдЪреВрдВрдХрд┐ рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдХреЛ find_files рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд╕рдордп рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдиреЛрдЯ: рдЗрд╕реЗ "$(foreach)" рд╡рд┐рд╢реЗрд╖ рдЪрд░ рдХреЗ рд╕рд╛рде рднреНрд░рдорд┐рдд рди рдХрд░реЗрдВред
рдкрддрд╛ рдЯреЗрдХреНрд╕реНрдЯ
рдЪреЗрддрд╛рд╡рдиреА рдЯреЗрдХреНрд╕реНрдЯ
рддреНрд░реБрдЯрд┐ рдЯреЗрдХреНрд╕реНрдЯ
рдЖрдЙрдЯрдкреБрдЯ рдЯреЗрдХреНрд╕реНрдЯ рдХреБрдЫ рднреА рдирд╣реАрдВ рд▓реМрдЯрд╛ рд░рд╣рд╛ рд╣реИред рдкрд╣рд▓рд╛ STDOUT рдХреЛ рдЬрд╛рддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ STDERR рдХреЛ,
рддреАрд╕рд░рд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд░реЛрдХ рджреЗрддрд╛ рд╣реИред
рдкреВрд░реНрд╡ рдирд┐рд░реНрдорд╛рдг рд▓рдХреНрд╖реНрдп
рдмрдирд╛рдирд╛ рд▓рдХреНрд╖реНрдп
рдЕрдкрдирд╛ рддрд░реНрдХ рд╢рдмреНрджрд╢рдГ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рд╕реВрдЪреАрдмрджреНрдз рд╕рднреА рдлрд╝рд╛рдЗрд▓реЗрдВ рдмрдирд╛рддрд╛ рд╣реИред рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реИ
рдЬрдм рдореЗрдХ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддреЗ рд╕рдордп рдХрд┐рд╕реА рджреА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдРрд╕рд╛ рдЖрдорддреМрд░ рдкрд░ рд╣реЛрддрд╛ рд╣реИ
рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдмрд┐рд▓реНрдб рд╣реЛрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╢рд╛рдорд┐рд▓ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕реЗрдЯ рдХреА рдЧрдгрдирд╛ рдХреБрдЫ рд╢реЗрд▓ рджреНрд╡рд╛рд░рд╛ рдХреА рдЬрд╛рддреА рд╣реИ
рдЖрджреЗрд╢. рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
рдлрд╝рд╛рдЗрд▓_рд╕реВрдЪреА:
# рд╢реЗрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХрд╛ рдЖрджреЗрд╢ рджреЗрддрд╛ рд╣реИ
my_program : $(&cat $(prebuild file_list))
рдпрджрд┐ рдЖрдкрдХреЛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдирд┐рдпрдореЛрдВ рдореЗрдВ рд╕реВрдЪреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рд╣реЛрдЧрд╛
рдЕрдзрд┐рдХрддрдо рдПрдХ рдмрд╛рд░ рдЪрд░ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВ:
рдлрд╝рд╛рдЗрд▓_рд╕реВрдЪреА ;= $(&cat $(рдкреНрд░реАрдмрд┐рд▓реНрдб рдлрд╝рд╛рдЗрд▓_рд╕реВрдЪреА))
my_program1 : ao $(file_list)
my_program2 : bo $(file_list)
рдпрджрд┐ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЖрдкрдиреЗ рдХреЗрд╡рд▓ "$(&cat file_list)" рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдореЗрдХрдк рдмрд╛рдзреНрдп рдирд╣реАрдВ рдХрд░реЗрдЧрд╛
рд╢реЗрд▓ рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдлрд╝рд╛рдЗрд▓_рд▓рд┐рд╕реНрдЯ рдХреЛ рдЕрджреНрдпрддрд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред "$(рдкреНрд░реАрдмрд┐рд▓реНрдб )" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИ. рдЖрдк рдЕрдиреНрдп рдЪреАрдЬрд╝реЛрдВ рдХреЛ рдЖрдЬрд╝рдорд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд▓реЛрднрд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ
рдЗрд╕:
рдореЗрд░рд╛_рдкреНрд░реЛрдЧреНрд░рд╛рдо: рдлрд╝рд╛рдЗрд▓_рд╕реВрдЪреА $(&cat рдлрд╝рд╛рдЗрд▓_рд╕реВрдЪреА)
рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореЗрдХрдк рдХреЗ рдкреНрд░рдпрд╛рд╕ рд╕реЗ рдкрд╣рд▓реЗ "$(&cat file_list)" рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
"рдлрд╝рд╛рдЗрд▓_рд╕реВрдЪреА" рдмрдирд╛рдПрдБред
рдХреЗрд╡рд▓_рдлреЛрдиреА_рд▓рдХреНрд╖реНрдп рдирд╛рдореЛрдВ
рд╕реВрдЪреА рдореЗрдВ рдХреЗрд╡рд▓ рдЙрдиреНрд╣реАрдВ рдирд╛рдореЛрдВ рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рдирд┐рдпрдо (рдпрд╛ рддреЛ) рдХреЗ рдирдХрд▓реА рд▓рдХреНрд╖реНрдп рд╣реИрдВ
рд╕реНрдкрд╖реНрдЯ рдпрд╛ рдкреИрдЯрд░реНрди рдирд┐рдпрдо)ред рдЖрдк рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдореЗрдХрдк рдХреЗ рд╡рд┐рд╢реЗрд╖ рд╕рд╣рд┐рдд)ред
рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдореЗрдВ рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб, "**")ред (рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП "$(рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб )" рдлрд╝рдВрдХреНрд╢рди рджреЗрдЦреЗрдВред
рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЛ рд╕рдореВрд╣реАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
$(рдирдХрд▓реА рдкрд░реАрдХреНрд╖рдг): $(only_phony_targets */**/рдкрд░реАрдХреНрд╖рдг)
рдореВрд▓ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓
рдХрд┐рд╕реА рд╡реЗрд░рд┐рдПрдмрд▓ рдХрд╛ рдирд╛рдо рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЖрдкрдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдорд╛рди рдХрд╣рд╛рдВ рд╕реЗ рдЖрддрд╛ рд╣реИред
рдкрд░реНрд▓ рдкрд░реНрд▓рдХреЛрдб
рдореЗрдХрдкрд░рд▓реА рдкрд░реНрд▓рдХреЛрдб
рдХрд┐рд╕реА рдмреНрд▓реЙрдХ рдореЗрдВ рдкрд░реНрд▓рдХреЛрдб рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдкрд╣рд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг рд╕рд╛рджрд╛ рдкрд░реНрд▓ рд╣реИ
рдХреЛрдб, рдЬрдмрдХрд┐ рджреВрд╕рд░рд╛ рд╡реИрд░рд┐рдПрдВрдЯ рдкрд╣рд▓реЗ рдореЗрдХ-рд╕реНрдЯрд╛рдЗрд▓ рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд░реНрд▓рдХреЛрдб рдХреЛ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ
рд╡рд┐рд╕реНрддрд╛рд░ред
рдзреНрдпрд╛рди рджреЗрдВ, рдХрд┐, рд╕рднреА рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреА рддрд░рд╣, рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдбрд┐рд▓реАрдорд┐рдЯрд░ рднреАрддрд░ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗ рд╕рдХрддрд╛ рд╣реИ
рд╕рд┐рдВрдЧрд▓ рдпрд╛ рдбрдмрд▓ рдЙрджреНрдзреГрдд рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рдмрд╛рд╣рд░ рдкрд░реНрд▓рдХреЛрдбред рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕реЗ рджреЛрдЧреБрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдЕрдВрддрд┐рдо рдЙрджрд╛рд╣рд░рдг:
рд╡реАрдПрдЖрд░ = 1
VAR1 = ${perl ($VAR + 1) * 3}
VAR2 = $(perl do { $VAR *= 3; рдпрджрд┐ $VAR рд╣реИ рддреЛ $VAR + 1 } рд▓реМрдЯрд╛рдПрдБ)
VAR3 = $(makeperl $(VAR1) * 3 + $$VAR) # рдПрдХ рдореЗрдХ var рдФрд░ рдПрдХ рдкрд░реНрд▓ var
VAR = $((perl if( ... ) {... }))
рдЬрд╛рд▓реА рд╢рдмреНрдж
рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╢рдмреНрджреЛрдВ рдХреА рд╕реВрдЪреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирдХрд▓реА рд▓рдХреНрд╖реНрдп рд╣реИрдВ, рдФрд░ рдХреА рд╕реВрдЪреА рд▓реМрдЯрд╛рддрд╛ рд╣реИ
рд▓рдХреНрд╖реНрдп. рдЗрд╕реЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рд╣реИ:
$(рд╕рднреА рдирдХрд▓реА): my_program
$ (рдлреЛрдиреА рдХреНрд▓реАрди):
&rm -f *.o my_program
рдЖрдк рдХрд╣реАрдВ рднреА рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЛ рдирдХрд▓реА рдШреЛрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдЖрдкрдХреА рдореЗрдХрдлрд╝рд╛рдЗрд▓:
.рдлреЛрдиреА: рд╕рдм рд╕рд╛рдлрд╝
рдЫрд╛рдк рдЯреЗрдХреНрд╕реНрдЯ
рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрд╕реЗ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдпрд╣ рдЕрдзрд┐рдХрддрд░ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИ, рдЬрдм рдЖрдк рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рддреЗ
рд╕рдордЭреЗрдВ рдХрд┐ рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╡реИрд╕рд╛ рдХреНрдпреЛрдВ рд╣реЛрддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рд╣реЛрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
XYZ := $(рдкреНрд░рд┐рдВрдЯ $(patsubst %c, %o, $(SOURCE_FILES)))
"рдкреИрдЯрд╕рдмрд╕реНрдЯ" рдХреЙрд▓ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд┐рдВрдЯ рдХрд░ рд▓реЗрдЧрд╛ред
XYZ := $(patsubst %c, %o, $(рдкреНрд░рд┐рдВрдЯ $(SOURCE_FILES)))
"рдкреИрдЯрд╕рдмрд╕реНрдЯ" рдХреЙрд▓ рдХреЗ рдЕрдВрддрд┐рдо рддрд░реНрдХ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдЧрд╛ред
рдЦреЛрд▓ рд╢реЗрд▓-рдХрдорд╛рдВрдб
рджрд┐рдП рдЧрдП рд╢реЗрд▓ рдХрдорд╛рдВрдб рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдирдИ рд▓рд╛рдЗрдиреЗрдВ рд╣реЛрддреА рд╣реИрдВред
рдзреНрдпрд╛рди рджреЗрдВ, рдХрд┐, рд╕рднреА рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреА рддрд░рд╣, рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдбрд┐рд▓реАрдорд┐рдЯрд░ рднреАрддрд░ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗ рд╕рдХрддрд╛ рд╣реИ
рд╕рд┐рдВрдЧрд▓ рдпрд╛ рдбрдмрд▓ рдЙрджреНрдзреГрдд рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рдмрд╛рд╣рд░ рд╢реЗрд▓-рдХрдорд╛рдВрдбред рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕реЗ рджреЛрдЧреБрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдЬреИрд╕рд╛ рдХрд┐ рджреВрд╕рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣реИ:
рджрд┐рдирд╛рдВрдХ = $(рд╢реЗрд▓ рджрд┐рдирд╛рдВрдХ) # рдмреЗрд╣рддрд░: $(рдкрд░реНрд▓ рд╕реНрдХреЗрд▓рд░ рд╕реНрдерд╛рдиреАрдп рд╕рдордп)
VAR = ${{рд╢реЗрд▓ f() { рдЗрдХреЛ рд╣реИрд▓реЛ; }; рдПрдл}}
xargs рдЖрджреЗрд╢, рддрд░реНрдХ[,рдкреНрд░рддреНрдпрдп[,рд▓рдВрдмрд╛рдИ]]
рдЖрджреЗрд╢реЛрдВ рдХреА рдПрдХ рдирдИ рдкрдВрдХреНрддрд┐-рдкреГрдердХ рд╕реВрдЪреА рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ
рдЖрджреЗрд╢ рджреЗрдВ, рдФрд░ рд╕реВрдЪреА рдХреЗ рдпрдерд╛рд╕рдВрднрд╡ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВ, рдмрд┐рдирд╛ рдЖрдЧреЗ рдмрдврд╝реЗ
рд▓рдВрдмрд╛рдИ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ 1000) рд╡рд░реНрдг.
рдЗрд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЖрдкрдХреЗ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдХрдорд╛рдВрдб рд▓рдВрдмрд╛рдИ рд╕реАрдорд╛ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрдиреЗ рд╕реЗ рдмрдЪрдирд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдмрд╣реБрдд рд╕рд╛рд░реА рдЬреЗрдирд░реЗрдЯ рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓реЗрдВ рд╣реИрдВ, рддреЛ рд╕рдВрднрд╡рддрдГ рдЖрдк рдЕрдкрдирд╛
рд╕реНрд╡рдЪреНрдЫ рд▓рдХреНрд╖реНрдп (рдЬреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ "makeppclean" рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рд╣реИ)ред
рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджреЗрдЦреЛ:
$ (рдлреЛрдиреА рдХреНрд▓реАрди):
$(xargs $(RM), $(only_targets **/*))
рдЗрд╕рдХрд╛ рдПрдХ рджреБрд╖реНрдкрд░рд┐рдгрд╛рдо рдпрд╣ рднреА рд╣реИ рдХрд┐ рд╕реВрдЪреА рдореЗрдВ рдХреЛрдИ рднреА рдЖрджреЗрд╢ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ
рдЦрд╛рд▓реА рд╣реЛрддрд╛ рд╣реИ. рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдмрд┐рд▓реНрдЯрд┐рди &rm рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛,
рдХреНрдпреЛрдВрдХрд┐ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрдорд╛рдВрдб рдХреЗ рддрд░реНрдХ рдХреЗрд╡рд▓ рдкрд░реНрд▓ рдХреА рдореЗрдореЛрд░реА рджреНрд╡рд╛рд░рд╛ рд╕реАрдорд┐рдд рд╣реИрдВ:
$ (рдлреЛрдиреА рдХреНрд▓реАрди):
&rm -f $(only_targets **/*)
рдпрджрд┐ рдХреЛрдИ рддреАрд╕рд░рд╛ рддрд░реНрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рддреНрдпреЗрдХ рдХрдорд╛рдВрдб рдХреЛ рдкреЛрд╕реНрдЯрдлрд╝рд┐рдХреНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╣реИ
рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рдХреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА, рдЙрджрд╛. (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣рд╛рдВ рдлрд┐рд░ рд╕реЗ &echo рдорджрдж рдХрд░реЗрдЧрд╛):
рдШреЛрд╖рдгрд╛рдкрддреНрд░:
&rm -f $@
&рд╕реНрдкрд░реНрд╢ рдХрд░реЗрдВ $@
$(xargs рдкреНрд░рддрд┐рдзреНрд╡рдирд┐, $(only_nontargets **/*), >> $@)
рдЗрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ GNU рдореЗрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИрдВред
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрджрд┐ рдореЗрдХрдлрд╝рд╛рдЗрд▓ рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рджреМрд░рд╛рди рдХреЛрдИ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдПред
рдирд┐рд░реНрдпрд╛рдд рдЪрд░, рддреНрд░реБрдЯрд┐ рдпрд╛ рдЪреЗрддрд╛рд╡рдиреА рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд▓рд╛рдЗрди рдирдВрдмрд░ 0 рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реЗрдЧрд╛ред
onworks.net рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдСрдирд▓рд╛рдЗрди makepp_functions рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ