Ninja: рдирд┐рдВрдЬрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг

рдХреЛ рдирд┐рд░реНрдорд┐рдд 1 рдЕрдкреНрд░реИрд▓ 2015  ┬╖  9рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: ninja-build/ninja

рдорд╛рдореВрд▓реА рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХрд╛ рдЧреБрдЪреНрдЫрд╛:

1. рдирд┐рдВрдЬрд╛ рдореИрдиреБрдЕрд▓ рдореЗрдВ рдХреБрдЫ рдЬрдЧрд╣реЛрдВ рдкрд░ "рд╡реНрд╣рд╛рдЯреНрд╕рдПрдк" рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╣реИ; рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ? рдХреНрдпрд╛ рдЯреИрдм рдФрд░/рдпрд╛ рдХреИрд░рд┐рдЬ рд░рд┐рдЯрд░реНрди рдХреЛ рд╡реНрд╣рд╛рдЗрдЯрд╕реНрдкреЗрд╕ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ? (рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдирд┐рдВрдЬрд╛ рдЕрдЬреНрдЮреЗрдп рдХреЛ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдХрдо рд╕реЗ рдХрдо рдпрд╣ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдпреВрдирд┐рдХреЛрдб рд╡реНрд╣рд╛рдЗрдЯрд╕реНрдкреЗрд╕ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИред)

рд╡рд░реНрддрдорд╛рди рдирд┐рдВрдЬрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди \ r рдФрд░ \ t рдкрд░ рддреНрд░реБрдЯрд┐ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред "рд╡реНрд╣рд╛рдЯреНрд╕рдПрдк" рдХреЗ рдмрдЬрд╛рдп рдХреЗрд╡рд▓ "рд░рд┐рдХреНрдд рд╕реНрдерд╛рди" рдХрд╣рдирд╛ рдФрд░ \ r рдФрд░ \ t рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рдпрдо рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрддрд╛рдирд╛ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

2. рдХреНрдпрд╛ рд╕реНрд╡реАрдХрд╛рд░реНрдп рдЪрд░ рдирд╛рдореЛрдВ рдкрд░ рдХреЛрдИ рдкреНрд░рддрд┐рдмрдВрдз рд╣реИ? рдХреНрдпрд╛ "foo$ bar = 3" рдПрдХ рд╡реИрдз рдЪрд░ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рд╣реИ? рдХреНрдпрд╛ "${foo bar}" рдФрд░/рдпрд╛ "${foo$ bar}" рдЙрд╕ рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЗ рдорд╛рдиреНрдп рд╕рдВрджрд░реНрдн рд╣реИрдВ?

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирд┐рдВрдЬрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗрд╡рд▓ [a-zA-Z0-9_.-]+ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ "42" рдЬреИрд╕реЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ) рдЬреИрд╕реЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ "${foo}" рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдЙрди рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рдирдореЗрдВ рдЕрд╡рдзрд┐ рд╣реИ . рдпрд╣ рдХрд╣реАрдВ рднреА рдкреНрд░рд▓реЗрдЦрд┐рдд рдкреНрд░рддреАрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

3. "рдпрджрд┐ рдХреЛрдИ рд░реЗрдЦрд╛ рдкрд┐рдЫрд▓реЗ рд╡рд╛рд▓реЗ рд╕реЗ рдЕрдзрд┐рдХ рдЗрдВрдбреЗрдВрдЯ рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рдЙрд╕реЗ рдЙрд╕рдХреЗ рдкреИрд░реЗрдВрдЯ рд╕реНрдХреЛрдк рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ; рдпрджрд┐ рдпрд╣ рдкрд┐рдЫрд▓реЗ рд╡рд╛рд▓реЗ рд╕реЗ рдХрдо рдЗрдВрдбреЗрдВрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдкрд┐рдЫрд▓реЗ рд╕реНрдХреЛрдк рдХреЛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИред"

рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ "рдЗрд╕рдХреЗ рдорд╛рддрд╛-рдкрд┐рддрд╛" рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИ, рдЖрдИрдПрдордУред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдХрдбрд╝рд╛рдИ рд╕реЗ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЧрдИ рд╣реИ:

rule foo
    x = 1
    y = 2
  z = 3

"y = 2" рд▓рд╛рдЗрди "рдкрд┐рдЫрд▓реЗ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ" (рдпрд╛рдиреА, "x = 1") рдЗрдВрдбреЗрдВрдЯ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ _not_ рдЗрд╕рдХреЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рджрд╛рдпрд░реЗ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдорд╛рдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЗрд╕реА рддрд░рд╣, "z = 3" рд▓рд╛рдЗрди рдХреЛ "рдкрд┐рдЫрд▓реЗ рдПрдХ рд╕реЗ рдХрдо" рдЗрдВрдбреЗрдВрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ "рдкрд┐рдЫрд▓реЗ рд╕реНрдХреЛрдк рдХреЛ рдмрдВрдж рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП"ред

рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдореИрдВ рдирд┐рдВрдЬрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ, рдЗрдВрдбреЗрдВрдЯрд┐рдВрдЧ рдХреА рдорд╛рддреНрд░рд╛ рдорд╣рддреНрд╡рд╣реАрди рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдлрд╝рд╛рдЗрд▓ рдХреЗ рднреАрддрд░ рдХреЛрдИ рдиреЗрд╕реНрдЯреЗрдб рд╕реНрдХреЛрдкрд┐рдВрдЧ рдирд╣реАрдВ рд╣реИ: рдХреЛрдИ рдЗрдВрдбреЗрдВрдЯ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЗрд╡рд▓ рдЕрдВрддрд┐рдо рдЧреИрд░-рдЗрдВрдбреЗрдВрдЯреЗрдб рд▓рд╛рдЗрди рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред

4. рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рджрд╛рдИрдВ рдУрд░ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреА рд╕рдВрдЦреНрдпрд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдХрд╣реАрдВ рднреА рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдореИрдВ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдВред

5. рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдХреЗрд╡рд▓ рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрддреА рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕рд╣рдЬ рд░реВрдк рд╕реЗ рдореИрдВрдиреЗ рдЙрдирд╕реЗ рд╢реЗрд▓ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХреА рд╣реЛрдЧреАред рд╢рд╛рдпрдж рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИред

6. рдпреБрдХреНрддрд┐ рдХрд╣рддреА рд╣реИ "рдмрд┐рд▓реНрдб рдмреНрд▓реЙрдХ (рдпрд╛ рдирд┐рдпрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ) рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдЪрд░ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рд▓реБрдХрдЕрдк рдСрд░реНрдбрд░ рд╣реИ: [...] 2. рдмрд┐рд▓реНрдб рдмреНрд▓реЙрдХ рд╕реЗ рдмрд┐рд▓реНрдб-рд╕реНрддрд░реАрдп рдЪрд░ред"

рд▓реЗрдХрд┐рди рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрд╕ рдмрд┐рд▓реНрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП "рдЗрдХреЛ 1 2 4" рдЪрд▓рд╛рддрд╛ рд╣реИред

rule echo
    command = echo $args
args = 1
args = $args 2
build hello: echo
    args = $args 3
    args = $args 4

7. рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди "$!" рдЬреИрд╕реЗ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдПрд╕реНрдХреЗрдк рдЕрдиреБрдХреНрд░рдореЛрдВ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ; рджрд╕реНрддрд╛рд╡реЗрдЬ рдХреЗ рд▓рд╛рдпрдХ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ $ рдХреЗ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧ рдЕрдорд╛рдиреНрдп рд╣реИрдВред

8. рд╢рд╛рдмреНрджрд┐рдХ "|" рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдПрд╕реНрдХреЗрдк рдЕрдиреБрдХреНрд░рдо рдирд╣реАрдВ рд╣реИ рд╡рд░реНрдг, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдирд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд╕рд╛рдорд╛рдиреНрдп рд╡рд░реНрдг рд╣реИред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирд┐рдВрдЬрд╛ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрдзрд┐рдХрд╛рдВрд╢ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рд╢реНрдЪрд┐рдд рдЙрддреНрддрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рднреА рдХрд┐ рд╣рдо рдирд┐рдВрдЬрд╛ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд╕рд╛рде рдареАрдХ рд╣реИрдВ рдЬрд╣рд╛рдВ рдЗрд╕рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред

рддрдм рдЖрдк рдЯреИрдм рдкрд░ рд╕реЗ рдкреНрд░рддрд┐рдмрдВрдз рд╣рдЯрд╛рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╕реНрд╡рд░реВрдкрдг рдХреА рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╢реИрд▓реА рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдХреЗрд╡рд▓ рдореЗрдХ рдХреА рдЧрд▓рддреА рдХреЛ рджреЛрд╣рд░рд╛рдирд╛ рд╣реИред

рд▓реЗрдХреНрд╕рд░ рдХреЛ рдХреЗрд╡рд▓ рддрднреА рддреНрд░реБрдЯрд┐ рдЙрдард╛рдиреА рдЪрд╛рд╣рд┐рдП рдЬрдм рдЯреИрдм рдФрд░ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдПрдХ рд╣реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдорд┐рд╢реНрд░рд┐рдд рд╣реЛрдВ , рдЬрд┐рд╕реЗ (рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ) рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдкрд╣рд▓реА рдЗрдВрдбреЗрдВрдЯ рд▓рд╛рдЗрди рд╢реЗрд╖ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдЕрдкреЗрдХреНрд╖рд┐рдд рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рд╕реЗрдЯ рдХрд░ рд╕рдХрддреА рд╣реИред

рд╕рднреА 9 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рдореЗрдВ рдЗрд╕реЗ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдЙрди рдореБрджреНрджреЛрдВ рдкрд░ рдЕрд▓рдЧ рдмрдЧ рдлрд╛рдЗрд▓ рдХрд░реЗрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдареАрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред :) рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ #5 рдбрд╛рд▓рдиреЗ рдЬреИрд╕реА рд╕рд╛рдордЧреНрд░реА рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдХреА рддрд░рд╣ рд▓рдЧрддреА рд╣реИред

рдЗрдирдореЗрдВ рд╕реЗ рдХрдИ рдХреЛрдиреЗ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдЬрд╛рдирдмреВрдЭрдХрд░ рдЗрд╕реЗ рдЕрдирдХрд╣рд╛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рдирд╣реАрдВ рдерд╛ рдХрд┐ рдЙрддреНрддрд░ рдХреНрдпрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдореИрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдмрд╛рдВрдзрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдерд╛, рдФрд░ рди рд╣реА рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ 20% рдЕрдзрд┐рдХ рдХреЗ рд╕рд╛рде рдореИрдиреБрдЕрд▓ рд╣реЛрдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реИ рдкрд╛рда рдЬреЛ рд╣рд░ рдЕрдВрддрд┐рдо рдХреЛрдиреЗ рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирд┐рдВрдЬрд╛ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрдзрд┐рдХрд╛рдВрд╢ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рд╢реНрдЪрд┐рдд рдЙрддреНрддрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рднреА рдХрд┐ рд╣рдо рдирд┐рдВрдЬрд╛ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд╕рд╛рде рдареАрдХ рд╣реИрдВ рдЬрд╣рд╛рдВ рдЗрд╕рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк "\r" рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд░рд╡рд╛рд╣ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╣рдо рдЗрд╕реЗ рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЪреАрдЬреЛрдВ рдХреЛ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред) рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╣рдо рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдмрджрд▓рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рдХрд░ рд╕рдХрддреА рд╣реИ рд▓реЗрдХрд┐рди рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдРрд╕рд╛ рдХрднреА рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ рдПрдХ рд╕рдорд╕реНрдпрд╛ред

рд░реЗ 3, рдореВрд▓ рд░реВрдк рд╕реЗ рдореИрдВрдиреЗ рдЗрдВрдбреЗрдВрдЯрд┐рдВрдЧ рдХреЗ рдХрдИ рдиреЗрд╕реНрдЯреЗрдб рд╕реНрдХреЛрдк (рдЬреИрд╕реЗ рд╣рд╛рд╕реНрдХреЗрд▓ "рдХрд╣рд╛рдВ" рдХреНрд▓реЙрдЬ) рдХреА рдХрд▓реНрдкрдирд╛ рдХреА рдереА рдФрд░ рдлрд┐рд░ рдпрд╣ рдХрднреА рднреА рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд░рд╣рд╛ред рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рд╕рднреА рдЙрд▓реНрд▓реЗрдЦреЛрдВ рдХреЛ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓ "рдЗрдВрдбреЗрдВрдЯ рдпрд╛ рдирд╣реАрдВ" рдХреЛ рд╕рд░рд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред

рд░реБ 4, рдХреНрдпрд╛ рдЖрдк рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ?

7 рдФрд░ 8 рд░реБрдкрдпреЗ, рдпрд╣ рд╣рд╛рд▓рд┐рдпрд╛ рдзрд╛рдЧрд╛ рджреЗрдЦреЗрдВ: https://groups.google.com/forum/#!topic/ninja -build/UVYk9RhCE4M

рдЖрдЗрдЯрдо 4 рдХреЗ рд▓рд┐рдП, рдЗрди рджреЛ рдмрд┐рд▓реНрдбреЛрдВ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕рдорд╛рди рд╣реИ:

build a.out: link foo.o bar.o
build a.out: link foo.o  bar.o

рд▓реЗрдХрд┐рди рдЗрди рджреЛрдиреЛрдВ рдирд┐рдпрдореЛрдВ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрд▓рдЧ рд╣реИ:

rule hello_one_space_world
    command = echo "hello world"
rule hello_two_space_world
    command = echo "hello  world"

рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдореИрдиреБрдЕрд▓ рд╕реЗ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд╣реИред

рд╕рдВрджрд░реНрдн: рдирд┐рдВрдЬрд╛ рдкрд╛рд░реНрд╕рд░ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рд╡рд┐рдЪрд╛рд░ "var = value" рдХреЗ рдореВрд▓реНрдп рднрд╛рдЧ рдХреЛ рдкрдереЛрдВ рдХреА рд╕реВрдЪреА (рдпрд╛рдиреА, рдЕрдВрддрд░рд┐рдХреНрд╖ рд╕реЗ рдЕрд▓рдЧ рдЯреЛрдХрди рдХрд╛ рдЕрдиреБрдХреНрд░рдо) рдХреЗ рд╕рдорд╛рди рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрдерд╛ рдФрд░ рдлрд┐рд░ рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдХреЗ рд╕рд╛рде рдлрд┐рд░ рд╕реЗ рдЬреЛрдбрд╝ рджреВрдВрдЧрд╛ рдЕрдВрддрд░рд┐рдХреНрд╖ рдмрд╛рдж рдореЗрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЧрд▓рдд рд╣реИред (рдмреЗрд╢рдХ, рдореБрдЭреЗ рд╡реИрд╕реЗ рднреА "рд╡реИрд▓реНрдпреВ" рдЯреЛрдХрди рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд▓реЗрдХреНрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рдФрд░ | рд╡рд░реНрдг рднреА, рдЗрд╕рд▓рд┐рдП рдЕрдм рдореИрдВ рд╕рд┐рд░реНрдл рдпрд╣ рдЯреНрд░реИрдХ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЕрдВрддрд┐рдо рдЯреЛрдХрди "=" рдерд╛ рдпрд╛ рдирд╣реАрдВред)

fwiw, рдореИрдВрдиреЗ рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ рдирд┐рдВрдЬрд╛ рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрдкрдЪрд╛рд░рд┐рдХ (рдкреАрдИрдЬреА) рд╡реНрдпрд╛рдХрд░рдг рд▓рд┐рдЦрд╛ рдерд╛ рдХрд┐ рдореЗрд░рд╛ рдорддрд▓рдм рдирд┐рдВрдЬрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ рд╡рд┐рд▓рдп рд╣реЛрдирд╛ рдерд╛ рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрднреА рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рд╡рд╛рд▓реЛрдВ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдЧрд╛ ...

https://github.com/dpranke/glop/blob/master/test_grammars/ninja.pymeta

рд╣рд╛рдБ рдпреЗ рднреА рднрд┐рдиреНрди рд╣реИрдВ:

command = echo foo$
  bar
command = echo foo $
  bar

рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕рдХрд╛ рдЗрд▓рд╛рдЬ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ = рдПрдХ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд▓реЗрдХреНрд╕реНрдб рд╕реЗрдХреНрд╢рди рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ (рдЬреИрд╕реЗ " рд╕реА рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд▓реЗрдХреНрд╕реЗрдб рд╕реЗрдХреНрд╢рди рдХреИрд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ)ред

dpranke: рдзрдиреНрдпрд╡рд╛рдж, рдпрд╣ рдорджрджрдЧрд╛рд░ рд╣реИред (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдХреБрдЫ рд╣рдж рддрдХ рд╡рд┐рд╕рдВрдЧрддрд┐рдпреЛрдВ рдХреЛ рдиреЛрдЯ рдХрд░рддрд╛ рд╣реВрдВ; рдХреНрдпрд╛ рдЙрдиреНрд╣реЗрдВ рдХрд╣реАрдВ рд▓рд┐рдЦрдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реИ?)

рдЗрд╕рд╕реЗ рдореБрдЭреЗ рдпрд╣ рднреА рдПрд╣рд╕рд╛рд╕ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ (рдЬреИрд╕реЗ, рдирд┐рдпрдо рдФрд░ рдЪрд░ рдирд╛рдо) рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдХреЗ рд▓рд┐рдП "$\n" рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд▓реЗрдХреНрд╕рд░ рдХреЛ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рднреА рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд░реВрдк рд╕реЗ рдЬрд╛рдирдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ (рдкрде рдФрд░ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЬрд╣рд╛рдВ рдпрд╣ рд╣реИ рдЕрдиреБрдорддрд┐ рджреА)ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╡реНрдпрд╛рдХрд░рдг рдХреЗ рд▓рд┐рдП рдкрд╛рд░рдВрдкрд░рд┐рдХ рд▓реЗрдХреНрд╕рд░ + рдкрд╛рд░реНрд╕рд░ рдЬрдирд░реЗрдЯрд░ рд╕рдорд╛рдзрд╛рди рдЕрд╡реНрдпрд╡рд╣рд╛рд░рд┐рдХ рдмрдирд╛рддреЗ рд╣реИрдВред рдЦреВрдВрдЯреА рдпрд╣рд╛рдБ рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИред

рдмреБрдзрд╡рд╛рд░, 1 рдЕрдкреНрд░реИрд▓, 2015 рдХреЛ рд╢рд╛рдо 5:38 рдмрдЬреЗ, рдореИрдереНрдпреВ рдбреЗрдореНрдкрд╕реНрдХреА рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

dpranke: рдзрдиреНрдпрд╡рд╛рдж, рдпрд╣ рдорджрджрдЧрд╛рд░ рд╣реИред (рдореИрдВ рдХреБрдЫ рд╣рдж рддрдХ рд╡рд┐рд╕рдВрдЧрддрд┐рдпреЛрдВ рдХреЛ рдиреЛрдЯ рдХрд░рддрд╛ рд╣реВрдВ
рдпрджреНрдпрдкрд┐; рдХреНрдпрд╛ рдЙрдиреНрд╣реЗрдВ рдХрд╣реАрдВ рд▓рд┐рдЦрдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реИ?)

рд╣рд╛рдВ, рдЕрдЧрд░ рд╡рд┐рд╕рдВрдЧрддрд┐рдпрд╛рдВ рд╣реИрдВ рддреЛ рдореЗрд░рд╛ рдЕрдЬрдЧрд░ рдирд┐рдВрдЬрд╛ рдХреНрд▓реЛрди рд╢рд╛рдпрдж рд╣реИ
рдЫреЛрдЯреА рдЧрд╛рдбрд╝реА рдФрд░ рдореИрдВ рдЗрд╕реЗ рдареАрдХ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ :)ред рд╣рдореЗрдВ рд╡реНрдпрд╛рдХрд░рдг рдХреЛ рднреА рдЗрд╕рдореЗрдВ рдзрдХреЗрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП
рдирд┐рдВрдЬрд╛ рдбреЙрдХреНрд╕ред

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рджреЛ рд▓реЗрдХреНрд╕рд░реНрд╕ рд╣реИрдВ: рдПрдХ рдЯреЛрдХрди рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП (рдЬреЛ $ рдХреЛ рдирд╣реАрдВ рд╕рдордЭрддрд╛ рд╣реИ) рдФрд░ рджреВрд╕рд░рд╛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдФрд░ рдЪрд░ рдорд╛рдиреЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП (рдЬреЛ $ рдХреЛ рд╕рдордЭрддрд╛ рд╣реИ)ред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд▓реЗрдХреНрд╕рд┐рдВрдЧ рдкрд╛рд░реНрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирд┐рдВрдЬрд╛ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрдзрд┐рдХрд╛рдВрд╢ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рд╢реНрдЪрд┐рдд рдЙрддреНрддрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рднреА рдХрд┐ рд╣рдо рдирд┐рдВрдЬрд╛ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд╕рд╛рде рдареАрдХ рд╣реИрдВ рдЬрд╣рд╛рдВ рдЗрд╕рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред

рддрдм рдЖрдк рдЯреИрдм рдкрд░ рд╕реЗ рдкреНрд░рддрд┐рдмрдВрдз рд╣рдЯрд╛рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╕реНрд╡рд░реВрдкрдг рдХреА рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╢реИрд▓реА рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдХреЗрд╡рд▓ рдореЗрдХ рдХреА рдЧрд▓рддреА рдХреЛ рджреЛрд╣рд░рд╛рдирд╛ рд╣реИред

рд▓реЗрдХреНрд╕рд░ рдХреЛ рдХреЗрд╡рд▓ рддрднреА рддреНрд░реБрдЯрд┐ рдЙрдард╛рдиреА рдЪрд╛рд╣рд┐рдП рдЬрдм рдЯреИрдм рдФрд░ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдПрдХ рд╣реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдорд┐рд╢реНрд░рд┐рдд рд╣реЛрдВ , рдЬрд┐рд╕реЗ (рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ) рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдкрд╣рд▓реА рдЗрдВрдбреЗрдВрдЯ рд▓рд╛рдЗрди рд╢реЗрд╖ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдЕрдкреЗрдХреНрд╖рд┐рдд рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рд╕реЗрдЯ рдХрд░ рд╕рдХрддреА рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

evmar picture evmar  ┬╖  10рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

dabrahams picture dabrahams  ┬╖  16рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Alexander-- picture Alexander--  ┬╖  20рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jlebar picture jlebar  ┬╖  14рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Psirus picture Psirus  ┬╖  9рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ