Π ΠΈΡΠ°ΡΠ΄ ΠΠΆΠΎΠ½Ρ (Richard WM Jones), Π°Π²ΡΠΎΡ , ΡΠ°Π±ΠΎΡΠ΅Ρ Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΡΠ° Red Hat, Π½ΠΎΠ² ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ , Π½Π°ΡΠΎΡΠ΅Π½ ΠΊΡΠΌ ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° Π½Π΅Π΄ΠΎΡΡΠ°ΡΡΡΠΈΡΠ΅ ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈΡΠ΅ Π² ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° make, ΠΊΠ°ΡΠΎ ΡΡΡΠ΅Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π·Π°ΠΏΠ°Π·Π²Π° ΠΎΠ±ΡΠ°ΡΠ° ΠΏΡΠΎΡΡΠΎΡΠ° ΠΈ ΡΠ°Π·Π±ΠΈΡΠ°Π΅ΠΌΠΎΡΡ Π½Π° ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅ΡΠ΅. ΠΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡΡ make Π΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ°Π½ ΠΏΡΠ΅Π· 1976 Π³ΠΎΠ΄ΠΈΠ½Π° ΠΈ ΠΈΠΌΠ° ΡΠ΅Π΄ΠΈΡΠ° ΠΊΠΎΠ½ΡΠ΅ΠΏΡΡΠ°Π»Π½ΠΈ Π½Π΅Π΄ΠΎΠ½ΠΎΡΠ΅Π½ΠΎΡΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΏΠ»Π°Π½ΠΈΡΠ°ΠΌΠ΅ Π΄Π° ΠΎΡΡΡΡΠ°Π½ΠΈΠΌ Π² Goals, Π±Π΅Π· Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΡΠΌΠ΅ ΠΎΠ±ΡΠ°ΡΠ° ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ.
ΠΠ·Ρ
ΠΎΠ΄Π΅Π½ ΠΊΠΎΠ΄ Π½Π° Goals ΠΏΠΎ Π»ΠΈΡΠ΅Π½Π· GPLv2+.
:
- ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° ΡΠ°ΠΌΠΎ Π½Π° Π΅Π΄Π½Π° ΡΠ°ΠΊΡΠΈΠΊΠ° Π·Π° ΡΠ°Π·ΡΠ΅ΡΠ°Π²Π°Π½Π΅ Π½Π° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ β βΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΡΠ° Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°, Π°ΠΊΠΎ ΡΠ΅Π»Π΅Π²ΠΈΡΡ ΡΠ°ΠΉΠ» Π»ΠΈΠΏΡΠ²Π° ΠΈΠ»ΠΈ Π΅ ΠΏΠΎ-ΡΡΠ°Ρ ΠΎΡ Π΅Π΄Π½Π° ΠΎΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈΡΠ΅β. Π Goals ΠΏΠ»Π°Π½ΠΈΡΠ°ΠΌΠ΅ Π΄Π° ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ ΠΈ Π΄ΡΡΠ³ΠΈ ΡΠ°ΠΊΡΠΈΠΊΠΈ, ΠΊΠ°ΡΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π½Π°Π»ΠΈΡΠΈΠ΅ Π½Π° URL, ΡΡΠ°Π²Π½ΡΠ²Π°Π½Π΅ Π½Π° Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π½Π° ΠΏΡΠΎΠΌΡΠ½Π° Ρ Π²ΡΠ΅ΠΊΠΈ ΡΠ°ΠΉΠ», ΠΎΡΠ΅Π½ΠΊΠ° Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠ° Π² , ΡΡΠ°Π²Π½ΡΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Π½ΠΈ ΡΡΠΌΠΈ, ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ΅ΡΡΠΎΠ²ΠΈ Π½Π°Π±ΠΎΡΠΈ Ρ ΠΈΠ·Π±ΠΈΡΠ°ΡΠ΅Π»Π½ΠΎ ΠΏΡΠΎΠΏΡΡΠΊΠ°Π½Π΅ Π½Π° ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅.
- ΠΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΡΠ΅Π»ΠΈΡΠ΅ Π·Π° ΡΠ±ΠΎΡΠΊΠ°, ΡΡΠΈΠ»ΠΈΡΠ°ΡΠ° make Π½Π΅ ΡΠ°Π·Π΄Π΅Π»Ρ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ΡΠ΅ ΠΈ ΠΈΠΌΠ΅Π½Π°ΡΠ° Π½Π° ΠΏΡΠ°Π²ΠΈΠ»Π°ΡΠ° ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ, Π»ΠΈΠΏΡΠ²Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π΄Π°Π»ΠΈ ΠΏΡΠΈ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠ°Π²ΠΈΠ»ΠΎΡΠΎ Π½Π°ΠΈΡΡΠΈΠ½Π° ΡΠ΅ Π±ΡΠ΄Π΅ ΡΡΠ·Π΄Π°Π΄Π΅Π½ ΡΠ°ΠΉΠ»ΡΡ, ΠΊΠΎΠΉΡΠΎ Π΅ Π·Π°ΡΠ²Π΅Π½. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π°ΠΊΠΎ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ Π±ΡΠ΄Π΅ ΡΡΠ·Π΄Π°Π΄Π΅Π½ ΡΠ°ΠΉΠ» Ρ ΠΈΠΌΠ΅ βtestβ ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠ΅ Π½Π° ΠΏΡΠ°Π²ΠΈΠ»ΠΎ Ρ ΠΈΠΌΠ΅ΡΠΎ βtestβ, ΠΊΠΎΠ΅ΡΠΎ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΡΠ΅ΡΡΠΎΠ²ΠΈ ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅, ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ Π½ΡΠΌΠ° Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Ρ, ΡΡΠΉ ΠΊΠ°ΡΠΎ make ΡΠ΅ ΠΏΡΠΈΠ΅ΠΌΠ΅, ΡΠ΅ ΡΠ΅Π»ΡΠ° Π΅ ΡΠ±ΠΎΡΠ΅Π½Π° ΠΈ Π½Π΅ ΠΈΠ·ΠΈΡΠΊΠ²Π° ΠΈΠ·Π²ΡΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΊΠ°ΠΊΠ²ΠΈΡΠΎ ΠΈ Π΄Π° Π±ΠΈΠ»ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ (Π·Π° Π΄Π° ΡΠ΅ Π·Π°ΠΎΠ±ΠΈΠΊΠΎΠ»ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡΡ Π² make ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΠΎΡΠΎΡΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π°ΡΠ° β.PHONY: testβ). Goals ΡΠ²Π½ΠΎ ΡΠ°Π·Π΄Π΅Π»Ρ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ΡΠ΅ ΠΈ ΠΈΠΌΠ΅Π½Π°ΡΠ° Π½Π° ΠΏΡΠ°Π²ΠΈΠ»Π°ΡΠ°.

- ΠΡΠΎΠ±Π»Π΅ΠΌΡΡ Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΠ½Π΅ΡΠΎ Π½Π° ΡΠ°ΠΌΠΎ Π΅Π΄ΠΈΠ½ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π·Π° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈΡΠ΅ Π·Π° ΡΠ±ΠΎΡΠΊΠ°.

Π Goals ΡΠ΅ ΠΏΡΠ΅Π΄Π»Π°Π³Π° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π΅Π½ Π±ΡΠΎΠΉ ΠΈΠΌΠ΅Π½ΡΠ²Π°Π½ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ΅ ΠΎΡΠ΄Π΅Π»Π½ΠΎ Π΄Π° ΡΠ΅ ΠΈΠ·Π²Π»Π΅ΡΠ΅ ΠΎΡ ΠΈΠΌΠ΅ΡΠΎ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ°ΡΠ° Π½Π° ΡΠ°ΠΉΠ» Π·Π° ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ:

- ΠΡΠΎΠ±Π»Π΅ΠΌΠΈ Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ΡΠΎ ΡΡΡ shell-ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΡΠ° ΠΎΡ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ°Π½Π΅ Π½Π° Π΅ΠΊΡΠ°Π½ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»ΠΈ Π² ΠΈΠΌΠ΅Π½Π°ΡΠ° Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ, ΡΠ°Π·Ρ
ΠΎΠ΄ Π½Π° ΡΠ΅ΡΡΡΡΠΈ ΠΏΡΠΈ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΎΡΠ΄Π΅Π»Π΅Π½ shell-ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° Π²ΡΡΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π°, Π΄Π²ΠΎΠΉΠ½ΠΎ ΡΡΠ»ΠΊΡΠ²Π°Π½Π΅ Π½Π° ΡΠΈΠΌΠ²ΠΎΠ»Π° β$β (ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠ΅ ΠΊΠ°ΠΊΡΠΎ Π² shell, ΡΠ°ΠΊΠ° ΠΈ Π² make), ΠΎΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΎΡΡΡΡΠΏΠΈΡΠ΅.
ΠΠΎΡΠΎΡΠ΅Π½ΠΈΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ ΡΠ΅ ΡΠ΅ΡΠ°Π²Π°Ρ Π² Goals, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Π° Β«%Β» Π²ΠΌΠ΅ΡΡΠΎ Β«$Β» Π·Π° ΡΠ±ΠΎΡΠΎΡΠ½ΠΈΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ (ΠΎΡΠ²Π΅Π½ Β«$Β» Π·Π° shell), ΠΈ ΡΡΠ΅Π· ΠΏΡΠΈΠ»Π°Π³Π°Π½Π΅ Π½Π° ΠΏΠ°ΡΡΠ΅ΡΠ° , ΠΊΠΎΠΉΡΠΎ ΠΈΠ·ΠΈΡΠΊΠ²Π° ΠΎΠ±ΡΠ°ΠΌΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΡΠΈΡΠ° ΠΈ ΠΈΠΌΠ΅Π½Π° Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Ρ ΠΊΠ°Π²ΠΈΡΠΊΠΈ ΠΈ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° Π±Π»ΠΎΠΊΠΎΠ²Π΅ Ρ ΠΊΠΎΠ΄ Π² ΡΠΈΠ³ΡΡΠ½ΠΈ ΡΠΊΠΎΠ±ΠΊΠΈ. Π¦Π΅Π»ΠΈΡΡ Π±Π»ΠΎΠΊ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° Π² Π΅Π΄ΠΈΠ½ Π΅ΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½Π°ΡΠ° ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ°, Π° Π²ΡΡΡΠ΅ Π² Π±Π»ΠΎΠΊΠ° Π΅ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎ ΡΠΎΡΠΌΠ°ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ΄Π°, Π±Π΅Π· ΠΏΡΠΈΠ²ΡΡΠ·Π²Π°Π½Π΅ ΠΊΡΠΌ ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΈ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»ΠΈ.
ΠΠ΅ΡΠ΅:
target: foo.o bar.o
${CC} ${CFLAGS} $< -o $@Π‘ΡΠ°Π»ΠΎ:
Β«targetΒ»: Β«foo.oΒ», Β«bar.oΒ» {
LAGS %< -o %@
}
ΠΡΡΠ³ΠΈ ΠΎΡΠΎΠ±Π΅Π½ΠΎΡΡΠΈ Π½Π° Goals:
- ΠΠΏΡΠΈΠΎΠ½Π°Π»Π½Π°ΡΠ° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ ΠΈΠΌΠ΅Π½Π° ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ:
goal all = : Β«targetΒ»
goal link =
Β«targetΒ»: Β«foo.oΒ», Β«bar.oΒ» { β¦ }goal compile (name) =
Β«%name.oΒ»: Β«%name.cΒ», Β«dep.hΒ» { LAGS -c $^ -o $@ } - ΠΠ²Π° ΡΠ΅ΠΆΠΈΠΌΠ° Π½Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅: ΡΠ΅ΠΆΠΈΠΌ make Π·Π° ΡΡΠΏΠΎΡΡΠ°Π²ΡΠ½Π΅ Π½Π° ΡΠ±ΠΎΡΠΎΡΠ½ΠΈ ΡΠ΅Π»ΠΈ Ρ ΠΈΠΌΠ΅Π½Π° Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΠΉΠ»ΡΡ Β«foo.oΒ» ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²Π° Π½Π° ΡΠ΅Π»ΡΠ° Β«%name.oΒ»), ΠΈ ΡΠ΅ΠΆΠΈΠΌ Π½Π° Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ:
goal all = : link
goal link =
Β«targetΒ»: Β«foo.oΒ», compile (Β«barΒ») { β¦ }goal compile (name) =
Β«%name.oΒ»: Β«%name.cΒ», Β«dep.hΒ» { LAGS -c $^ -o $@ } - Π’Π°ΠΊΡΠΈΠΊΠ°ΡΠ° Π½Π° ΡΠ³Π»ΠΎΠ±ΡΠ²Π°Π½Π΅ ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΎΡ ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π°, Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΡΠ° ΠΎΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΡΠ³Π»ΠΎΠ±ΡΠ²Π°Π½Π΅ Π½Π° ΡΠ΅Π»ΡΠ° Π·Π° ΡΠ³Π»ΠΎΠ±ΡΠ²Π°Π½Π΅. ΠΠΊΠΎ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° ΠΎΠ±Π²ΡΡΠ·Π²Π°Π½Π΅ Ρ Π½Π°Π»ΠΈΡΠΈΠ΅ΡΠΎ Π½Π° ΡΠ°ΠΉΠ», ΡΠΎΠ²Π° ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ ΡΡΠ½ΠΎ ΡΡΠ΅Π· ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡ ΠΌΠ°ΡΠΊΠ΅Ρ ("target" Π·Π° ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΠΏΡΠ°Π²ΠΈΠ»ΠΎΡΠΎ ΠΈ *file("target") Π·Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΡΠ°ΠΉΠ»Π°).
Β«targetΒ»: Β«foo.oΒ», Β«bar.oΒ» { β¦ }
*file("target") : *file("foo.o"), *file("bar.o") { β¦ }
- Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ ΠΌΠ°ΡΠΊΠ΅ΡΠΈ Π·Π° ΡΠ°ΠΊΡΠΈΠΊΠΈΡΠ΅ Π·Π° ΡΠ³Π»ΠΎΠ±ΡΠ²Π°Π½Π΅. ΠΠ°ΡΠΊΠ΅ΡΡΡ "*file" Π΅ Π·Π°Π΄Π°Π΄Π΅Π½ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ (@{β¦} ΡΠΊΠ°Π·Π²Π° Π½Π° ΠΏΠΎΠ΄Π°Π²ΡΠ½Π΅ Π½Π° ΠΈΠ·Ρ
ΠΎΠ΄Π°, Π° "exit 99" ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡΠ° Π·Π° Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡ ΠΎΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΡΠ³Π»ΠΎΠ±ΡΠ²Π°Π½Π΅):
tactic *file (filename) = @{
test -f %filename || exit 99
for f in %ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru



