Π ΠΈΡΠ°ΡΠ΄ WM ΠΠΆΠΎΡΠ½Ρ, Π°Π²ΡΠΎΡ
ΠΠ·Ρ
ΠΎΠ΄Π½ΠΈΡΡ ΠΊΠΎΠ΄ Π½Π° Goals
- ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° ΡΠ°ΠΌΠΎ Π½Π° Π΅Π΄Π½Π° ΡΠ°ΠΊΡΠΈΠΊΠ° Π·Π° ΡΠ°Π·ΡΠ΅ΡΠ°Π²Π°Π½Π΅ Π½Π° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ - "ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΡΠ° Π·Π° Π°ΡΠ΅ΠΌΠ±Π»ΠΈΡΠ°Π½Π΅ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°, Π°ΠΊΠΎ ΡΠ΅Π»Π΅Π²ΠΈΡΡ ΡΠ°ΠΉΠ» Π»ΠΈΠΏΡΠ²Π° ΠΈΠ»ΠΈ Π΅ ΠΏΠΎ-ΡΡΠ°Ρ ΠΎΡ Π΅Π΄Π½Π° ΠΎΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈΡΠ΅." Goals ΠΏΠ»Π°Π½ΠΈΡΠ° Π΄Π° ΠΏΡΠΈΠ»ΠΎΠΆΠΈ Π΄ΡΡΠ³ΠΈ ΡΠ°ΠΊΡΠΈΠΊΠΈ, ΠΊΠ°ΡΠΎ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π½Π°Π»ΠΈΡΠΈΠ΅ Π½Π° URL Π°Π΄ΡΠ΅Ρ, ΡΡΠ°Π²Π½ΡΠ²Π°Π½Π΅ Π½Π° Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π·Π° ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΡ Ρ Π²ΡΠ΅ΠΊΠΈ ΡΠ°ΠΉΠ», ΠΎΡΠ΅Π½ΠΊΠ° Π½Π° Π²Π³ΡΠ°Π΄Π΅Π½ΠΈΡ ΠΏΠ°ΠΊΠ΅Ρ
ΠΠΎΠ΄ΠΆΠΈ , ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Π½ΠΈ ΡΡΠΌΠΈ, ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ΅ΡΡΠΎΠ²ΠΈ ΡΠ»ΡΡΠ°ΠΈ ΡΡΡ ΡΠ΅Π»Π΅ΠΊΡΠΈΠ²Π½ΠΎ ΠΏΡΠΎΠΏΡΡΠΊΠ°Π½Π΅ Π½Π° ΡΠ΅ΡΡΠΎΠ²Π΅. - ΠΠΎΠ³Π°ΡΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π° ΡΠ΅Π»ΠΈ Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅, make Π½Π΅ ΡΠ°Π·Π΄Π΅Π»Ρ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ΡΠ΅ ΠΈ ΠΈΠΌΠ΅Π½Π°ΡΠ° Π½Π° ΠΏΡΠ°Π²ΠΈΠ»Π°ΡΠ° ΠΈ Π² ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΡΠΎΠ²Π° Π½ΡΠΌΠ° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π΄Π°Π»ΠΈ ΠΏΡΠΈ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΡΠ°ΠΉΠ»ΡΡ, Π·Π° ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΡΠ²ΡΡΠ΄ΠΈ, ΡΠ΅ Π΅ ΡΡΠ·Π΄Π°Π΄Π΅Π½, Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»Π½ΠΎ ΡΠ΅ Π±ΡΠ΄Π΅ ΡΡΠ·Π΄Π°Π΄Π΅Π½. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π°ΠΊΠΎ ΠΈΠΌΠ°ΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π½Π°ΡΠ΅ΡΠ΅Π½ΠΎ "test", ΠΊΠΎΠ΅ΡΠΎ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅ Ρ ΡΠ΅ΡΡΠΎΠ²Π΅, ΡΠ°ΠΉΠ» Ρ ΠΈΠΌΠ΅ "test" Π΅ ΡΡΠ·Π΄Π°Π΄Π΅Π½ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ, ΡΠΎΠ³Π°Π²Π° ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ Π²Π΅ΡΠ΅ Π½ΡΠΌΠ° Π΄Π° Π±ΡΠ΄Π°Ρ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½ΠΈ, ΡΡΠΉ ΠΊΠ°ΡΠΎ make ΡΠ΅ ΡΡΠΈΡΠ°, ΡΠ΅ ΡΠ΅Π»ΡΠ° Π΅ ΠΈΠ·Π³ΡΠ°Π΄Π΅Π½Π° ΠΈ Π½Π΅ ΠΈΠ·ΠΈΡΠΊΠ²Π° Π²ΡΡΠΊΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ (Π·Π° Π΄Π° Π·Π°ΠΎΠ±ΠΈΠΊΠΎΠ»ΠΈΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π² make, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΠΎΡΠΎΡΠΈΡΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π°ΡΠ° β.PHONY: testβ). Π¦Π΅Π»ΠΈΡΠ΅ ΠΈΠ·ΡΠΈΡΠ½ΠΎ ΡΠ°Π·Π΄Π΅Π»ΡΡ ΠΈΠΌΠ΅Π½Π°ΡΠ° Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ΡΠ΅ ΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π°ΡΠ°.
- ΠΡΠΎΠ±Π»Π΅ΠΌ Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΠ½Π΅ΡΠΎ ΡΠ°ΠΌΠΎ Π½Π° Π΅Π΄ΠΈΠ½ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π·Π° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈΡΠ΅ Π·Π° ΡΠ³Π»ΠΎΠ±ΡΠ²Π°Π½Π΅.
Π¦Π΅Π»ΠΈΡΠ΅ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π΅Π½ Π±ΡΠΎΠΉ Π½Π°ΠΈΠΌΠ΅Π½ΡΠ²Π°Π½ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΡΠ΄Π΅Π»Π½ΠΎ Π΄Π° ΠΈΠ·Π²Π»Π΅ΡΠ΅ΡΠ΅ Π·Π½Π°ΠΊΠ° Π½Π° ΡΠ°ΠΉΠ» Π·Π° ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ ΠΎΡ ΠΈΠΌΠ΅ΡΠΎ:
- ΠΡΠΎΠ±Π»Π΅ΠΌΠΈ ΠΏΡΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ΡΠΎ Ρ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ° Π½Π° ΠΎΠ±Π²ΠΈΠ²ΠΊΠ°ΡΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΡΠ° Π΄Π° ΡΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ° Π΅ΠΊΡΠ°Π½ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»ΠΈ Π² ΠΈΠΌΠ΅Π½Π°ΡΠ° Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ΡΠ΅ ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈΡΠ΅, Π·Π°Π³ΡΠ±Π°ΡΠ° Π½Π° ΡΠ΅ΡΡΡΡΠΈ Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΎΡΠ΄Π΅Π»Π΅Π½ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ Π½Π° ΠΎΠ±Π²ΠΈΠ²ΠΊΠ°ΡΠ° ΠΏΡΠΈ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° Π²ΡΡΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π°, Π΄Π²ΠΎΠΉΠ½Π°ΡΠ° ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΈΡ Π½Π° Π·Π½Π°ΠΊΠ° "$" (ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ ΠΊΠ°ΠΊΡΠΎ Π² ΠΎΠ±Π²ΠΈΠ²ΠΊΠ°ΡΠ°, ΡΠ°ΠΊΠ° ΠΈ Π² make), ΠΊΠ°ΡΠΎ ΡΠ΅ Π²Π·Π΅ΠΌΠ°Ρ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ Π²Π΄Π»ΡΠ±Π½Π°ΡΠΈΠ½ΠΈΡΠ΅.
Π’Π΅Π·ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ ΡΠ΅ ΡΠ΅ΡΠ°Π²Π°Ρ Π² Goals ΡΡΠ΅Π· ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΡΠΈΠΌΠ²ΠΎΠ»Π° β%β Π²ΠΌΠ΅ΡΡΠΎ β$β Π·Π° Π°ΡΠ΅ΠΌΠ±Π»ΠΈΡΠ°ΡΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ (β$β ΠΎΡΡΠ°Π²Π° ΡΠ°ΠΌΠΎ Π·Π° ΠΎΠ±Π²ΠΈΠ²ΠΊΠ°ΡΠ°), ΠΊΠ°ΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ
LALR (1) , ΠΊΠΎΠ΅ΡΠΎ ΠΈΠ·ΠΈΡΠΊΠ²Π° Π΄Π° Π·Π°Π³ΡΠ°Π΄ΠΈΡΠ΅ ΠΏΡΡΠ΅ΠΊΠΈΡΠ΅ ΠΈ ΠΈΠΌΠ΅Π½Π°ΡΠ° Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ΡΠ΅ Ρ ΠΊΠ°Π²ΠΈΡΠΊΠΈ ΠΈ Π΄Π° ΠΌΠ°ΡΠΊΠΈΡΠ°ΡΠ΅ ΠΊΠΎΠ΄ΠΎΠ²ΠΈΡΠ΅ Π±Π»ΠΎΠΊΠΎΠ²Π΅ Ρ ΡΠΈΠ³ΡΡΠ½ΠΈ ΡΠΊΠΎΠ±ΠΈ. Π¦Π΅Π»ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π΅Π½ Π±Π»ΠΎΠΊ ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ° Π² Π΅Π΄Π½ΠΎ ΠΊΠΎΠΏΠΈΠ΅ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½Π°ΡΠ° ΠΎΠ±Π²ΠΈΠ²ΠΊΠ° ΠΈ Π΅ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΎ ΡΠΎΡΠΌΠ°ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ΄ Π²ΡΡΡΠ΅ Π² Π±Π»ΠΎΠΊΠ°, Π±Π΅Π· ΠΏΡΠ΅ΠΏΡΠ°ΡΠΊΠ° ΠΊΡΠΌ ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΈ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»ΠΈ.ΠΠ΅ΡΠ΅:
ΡΠ΅Π»: foo.o bar.o
${CC} ${CFLAGS} $< -o $@Π‘ΡΠ°Π½Π°:
"target": "foo.o", "bar.o" {
%CC %CFLAGS %< -o %@
}
ΠΡΡΠ³ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π° Goals:
- ΠΠΏΡΠΈΠΎΠ½Π°Π»Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΡΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ ΠΈΠΌΠ΅Π½Π° ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ:
ΡΠ΅Π» Π²ΡΠΈΡΠΊΠΈ = : "ΡΠ΅Π»"
ΡΠ΅Π» Π²ΡΡΠ·ΠΊΠ° =
"target": "foo.o", "bar.o" { ... }ΡΠ΅Π» ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ (ΠΈΠΌΠ΅) =
"%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ } - ΠΠ²Π° ΡΠ΅ΠΆΠΈΠΌΠ° Π½Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅: ΡΠ΅ΠΆΠΈΠΌ Π½Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π·Π° ΡΡΠΏΠΎΡΡΠ°Π²ΡΠ½Π΅ Π½Π° ΡΠ΅Π»ΠΈ Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ Ρ ΠΈΠΌΠ΅Π½Π° Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ (Π½Π°ΠΏΡ. ΡΠ°ΠΉΠ»ΡΡ "foo.o" ΡΡΠ²ΠΏΠ°Π΄Π° Ρ ΡΠ΅Π» "%name.o") ΠΈ ΡΠ΅ΠΆΠΈΠΌ Π½Π° Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅:
Π³ΠΎΠ» Π²ΡΠΈΡΠΊΠΈ = : Π²ΡΡΠ·ΠΊΠ°
ΡΠ΅Π» Π²ΡΡΠ·ΠΊΠ° =
"target": "foo.o", ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ ("bar") { ... }ΡΠ΅Π» ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ (ΠΈΠΌΠ΅) =
"%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ } - Π’Π°ΠΊΡΠΈΠΊΠ°ΡΠ° Π½Π° ΡΠ³Π»ΠΎΠ±ΡΠ²Π°Π½Π΅ ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΎΡ ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π°, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π·Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π΅ Π½Π° Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΡΠ° ΠΎΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΡΠ³Π»ΠΎΠ±ΡΠ²Π°Π½Π΅ Π½Π° ΠΌΠΈΡΠ΅Π½Π° Π·Π° ΡΠ³Π»ΠΎΠ±ΡΠ²Π°Π½Π΅. ΠΠΊΠΎ ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ Π²ΡΡΠ·ΠΊΠ° ΠΊΡΠΌ Π½Π°Π»ΠΈΡΠΈΠ΅ΡΠΎ Π½Π° ΡΠ°ΠΉΠ», ΡΠΎ ΡΠΎΠ²Π° ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΈΠ·ΡΠΈΡΠ½ΠΎ ΡΡΠ΅Π· ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡ Π·Π½Π°ΠΊ (βtargetβ Π·Π° ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΠΏΡΠ°Π²ΠΈΠ»ΠΎΡΠΎ ΠΈ *file (βtargetβ) Π·Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΡΠ°ΠΉΠ»Π°).
"target": "foo.o", "bar.o" { ... }
*file("target") : *file("foo.o"), *file("bar.o") { ... }
- Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄Π΅ΡΠΈΠ½ΠΈΡΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ Π°ΡΡΠΈΠ±ΡΡΠΈ Π½Π° ΡΠ°ΠΊΡΠΈΠΊΠ°ΡΠ° Π½Π° ΡΠ³Π»ΠΎΠ±ΡΠ²Π°Π½Π΅. Π€Π»Π°Π³ΡΡ "*file" Π΅ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ (@{...} ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΏΠΎΡΠΈΡΠΊΠ°Π½Π΅ Π½Π° ΠΈΠ·Ρ
ΠΎΠ΄Π°, Π° "exit 99" ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡΠ° Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΡΠ° ΠΎΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅):
ΡΠ°ΠΊΡΠΈΠΊΠ° *ΡΠ°ΠΉΠ» (ΠΈΠΌΠ΅ Π½Π° ΡΠ°ΠΉΠ») = @{
ΡΠ΅ΡΡ -f % ΠΈΠΌΠ΅ Π½Π° ΡΠ°ΠΉΠ» || ΠΈΠ·Ρ ΠΎΠ΄ 99
Π·Π° f Π² %ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru