Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π˜ΡΠΊΡƒΡΡΡ‚Π²ΠΎ программирования для UnixΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 127

Автор Π Π΅ΠΉΠΌΠΎΠ½Π΄ Π­Ρ€ΠΈΠΊ Π‘Ρ‚ΠΈΠ²Π΅Π½

Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ lex Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹ лСксСм Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΎΡ‡Π΅Π½ΡŒ быстро ΠΏΡ€ΠΈ распознавании Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Ρ… ΠΎΠ±Ρ€Π°Π·Ρ†ΠΎΠ² Π²ΠΎ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠ°Ρ…, ΠΎΠ΄Π½Π°ΠΊΠΎ извСстный ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π΅ lex язык рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΏΠ»ΠΎΡ…ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для вычислСния ΠΈΠ»ΠΈ распознавания рСкурсивно Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… структур. Для ΠΈΡ… Π°Π½Π°Π»ΠΈΠ·Π° потрСбуСтся уасс. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, нСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ тСорСтичСски Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ yacc-Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΡƒ с собствСнным сбором лСксСм, такая Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠ° Π±Ρ‹Π»Π° Π±Ρ‹ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½Π° ΠΊΠΎΠ΄ΠΎΠΌ, Π° Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ Π±Ρ‹Π» Π±Ρ‹ ΠΊΡ€Π°ΠΉΠ½Π΅ ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΌ. Для Π°Π½Π°Π»ΠΈΠ·Π° Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… лСксСм слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ lex. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π΄Π°Π½Π½Ρ‹Π΅ инструмСнты ΡΠ²Π»ΡΡŽΡ‚ΡΡ симбиотичСскими.

Если сущСствуСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ Π½Π° языкС Π±ΠΎΠ»Π΅Π΅ высокого уровня, Ρ‡Π΅ΠΌ Π‘ (Ρ‡Ρ‚ΠΎ ΠΈ рСкомСндуСтся; см. Π³Π»Π°Π²Ρƒ 14), Ρ‚ΠΎ слСдуСт Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ эквивалСнтныС срСдства, ΠΊΠ°ΠΊ PLY Π² Python (ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ lex ΠΈ уасс)95ΠΈΠ»ΠΈ Perl-ΠΌΠΎΠ΄ΡƒΠ»ΠΈ PY ΠΈ Parse::Yapp, Π»ΠΈΠ±ΠΎ Java-ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ CUP96, Jack97 ΠΈΠ»ΠΈ Yacc/M98.

Как ΠΈ Π² случаС с макропроцСссорами, ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, связанных с Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ ΠΊΠΎΠ΄Π° ΠΈ прСпроцСссорами, являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ошибки компиляции Π² сгСнСрированном ΠΊΠΎΠ΄Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π½ΠΎΠΌΠ΅Ρ€Π° строк сгСнСрированного ΠΊΠΎΠ΄Π° (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ), Π° Π½Π΅ Π½ΠΎΠΌΠ΅Ρ€Π° строк Π²ΠΎ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° (Ρ‚.Π΅. Ρ‚Π°ΠΌ, Π³Π΄Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ внСсти измСнСния). Π’ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°Ρ… уасс ΠΈ lex данная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΆΠ΅ конструкциями #line, Ρ‡Ρ‚ΠΎ ΠΈ Π² прСпроцСссорС Π‘. Они ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Π½ΠΎΠΌΠ΅Ρ€ строки для ΠΎΡ‚Ρ‡Π΅Ρ‚Π° ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…. Π›ΡŽΠ±Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ ΠΊΠΎΠ΄ Π½Π° Π‘ ΠΈΠ»ΠΈ Π‘++, Π΄ΠΎΠ»ΠΆΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

Π’ Π±ΠΎΠ»Π΅Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΎΠΌ смыслС Ρ…ΠΎΡ€ΠΎΡˆΠΎ спроСктированныС Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈΡΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ сгСнСрированный ΠΊΠΎΠ΄. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° являСтся нСпосрСдствСнной Π·Π°Π΄Π°Ρ‡Π΅ΠΉ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°.

15.3.1.1. Π£Ρ‡Π΅Π±Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€: Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠ° fetchmailrc

ΠšΠ°Π½ΠΎΠ½ΠΈΡ‡Π΅ΡΠΊΠΈΠΉ дСмонстрационный ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, Π²ΠΈΠ΄ΠΈΠΌΠΎ, приводится Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡƒΡ‡Π΅Π±Π½ΠΎΠΌ пособии ΠΏΠΎ lex ΠΈ уасс, прСдставляСт собой ΠΈΠ³Ρ€ΡƒΡˆΠ΅Ρ‡Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π°, которая Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈ вычисляСт Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ арифмСтичСскиС выраТСния. Π’ Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³Π΅ Π½Π΅Ρ‚ этого ΠΈΠ·Π±ΠΈΡ‚ΠΎΠ³ΠΎ клишС. ЗаинтСрСсованныС Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ исходному ΠΊΠΎΠ΄Ρƒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ bс( 1) ΠΈ dc( 1) ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° GNU ΠΈΠ»ΠΈ ΠΊ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ "hoc"99 см. [39].

ВмСсто этого Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠ° Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² fetchmail прСдоставляСт Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ ΡƒΡ‡Π΅Π±Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ срСднСго Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΏΠΎ использованию lex ΠΈ уасс. Π—Π΄Π΅ΡΡŒ имССтся нСсколько интСрСсных ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠ².

/Π΅Π³-спСцификация Π² Ρ„Π°ΠΉΠ»Π΅ rcfile_l.lβ€” вСсьма типичная рСализация shell-ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ синтаксиса. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, ΠΊΠ°ΠΊ Π΄Π²Π° Π΄ΠΎΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ… ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ строки Π»ΠΈΠ±ΠΎ с ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΌΠΈ, Π»ΠΈΠ±ΠΎ с Π΄Π²ΠΎΠΉΠ½Ρ‹ΠΌΠΈ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°ΠΌΠΈ; данная идСя Ρ…ΠΎΡ€ΠΎΡˆΠ° Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅. ΠŸΡ€Π°Π²ΠΈΠ»Π° для принятия (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, со Π·Π½Π°ΠΊΠΎΠΌ) Ρ†Π΅Π»Ρ‹Ρ… Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠ² ΠΈ отклонСния ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² Ρ‚Π°ΠΊΠΆΠ΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ достаточно распространСнными.

уасс-спСцификация Π² Ρ„Π°ΠΉΠ»Π΅ rcfile_y.y достаточно длинная, Π½ΠΎ понятная. Она Π½Π΅ осущСствляСт ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ fetchmail-дСйствий, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ устанавливаСт Π±ΠΈΡ‚Ρ‹ Π² спискС Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… Π±Π»ΠΎΠΊΠΎΠ². ПослС запуска fetchmail Π² ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ пСриодичСски ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ ΠΏΠΎ Π΄Π°Π½Π½ΠΎΠΌΡƒ списку, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ запись для управлСния сСансом получСния ΠΏΠΎΡ‡Ρ‚Ρ‹ с ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΡƒΠ·Π»Π°.

15.3.2. Π£Ρ‡Π΅Π±Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€: Glade

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Glade Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Π»Π°ΡΡŒ Π² Π³Π»Π°Π²Π΅ 8 Π² качСствС Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΌΠΈΠ½ΠΈ-языка. Π’Π°ΠΊΠΆΠ΅ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π»ΠΎΡΡŒ, Ρ‡Ρ‚ΠΎ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ сСрвСрной части Glade гСнСрируСтся ΠΊΠΎΠ΄ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… языков.

Glade прСдставляСт собой Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ соврСмСнный ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. ΠžΠΏΠΈΡΠ°Π½Π½Ρ‹Π΅ Π½ΠΈΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ GUI-построитСлСй (особСнно Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ коммСрчСских GUI-построитСлСй), Π΄Π΅Π»Π°ΡŽΡ‚ Glade. Unix-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ "ΠΏΠΎ Π΄ΡƒΡ…Ρƒ". (

β€’ Glade GUI ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠ΄Π° Glade Π½Π΅ связаны Π² массивном ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Π΅, Π° ΠΏΠΎΠ΄Ρ‡ΠΈΠ½ΡΡŽΡ‚ΡΡ ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ раздСлСния (ΠΈ построСны согласно ΠΌΠΎΠ΄Π΅Π»ΠΈ "раздСлСния ядра ΠΈ интСрфСйса").

β€’ GUI ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠ΄Π° ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ тСкстового Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° (основанного Π½Π° XML), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Ρ€ΡƒΠ³ΠΈΡ… инструмСнтов.

β€’ ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ΡΡ нСсколько Ρ†Π΅Π»Π΅Π²Ρ‹Ρ… языков (Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π‘ ΠΈΠ»ΠΈ Π‘++). БущСствуСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π»Π΅Π³ΠΊΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ языки.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ позволяСт ΠΏΡ€ΠΈ нСобходимости Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ GUI-интСрфСйса Π² Glade.

15.4. Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° make: автоматизация ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€

Π‘Π°ΠΌΠΈ ΠΏΠΎ сСбС исходныС ΠΊΠΎΠ΄Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π΅ Π΄Π΅Π»Π°ΡŽΡ‚ прилоТСния. Π’Π°ΠΊΠΆΠ΅ Π²Π°ΠΆΠ΅Π½ способ ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ ΠΈ ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ для распространСния. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма Unix прСдоставляСт ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ срСдство для частичной Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… процСссов β€” make(1). Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° make описываСтся Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ Π²Π²ΠΎΠ΄Π½Ρ‹Ρ… ΠΊΠ½ΠΈΠ³ ΠΏΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС Unix. Π‘ΠΎΠ»Π΅Π΅ конкрСтная ссылка приводится Π² ΠΊΠ½ΠΈΠ³Π΅ "Managing Projects tenth Make" [57]. Π’ случаС использования GNU make (Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Ρ€Π°Π·Π²ΠΈΡ‚ΠΎΠ³ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° make, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ поставляСтся Π² составС Unix-систСм с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ) Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ ΠΊΠ½ΠΈΠ³ΠΈ "Programming with GNU Software" [50] ΠΌΠΎΠ³ΡƒΡ‚ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π»ΡƒΡ‡ΡˆΠΈΠΌΠΈ. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Unix-систСм, содСрТащих GNU make, Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ GNU Emacs. Π’ Ρ‚Π°ΠΊΠΈΡ… систСмах, вСроятно, ΠΏΠΎΠ»Π½ΠΎΠ΅ руководство ΠΏΠΎ make ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ Π² ш/ΠΎ-систСмС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Emacs.

На сайтС FSF доступны вСрсии GNU make для DOS ΠΈ Windows.

15.4.1. Базовая тСория make

ΠŸΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° языках Π‘ ΠΈΠ»ΠΈ Π‘++ Π²Π°ΠΆΠ½ΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ для построСния прилоТСния являСтся сСмСйство ΠΊΠΎΠΌΠ°Π½Π΄ компиляции ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… для получСния ΠΈΠ· Ρ„Π°ΠΉΠ»ΠΎΠ² исходного ΠΊΠΎΠ΄Π° Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ². Π’Π²ΠΎΠ΄ Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄ β€” Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΈ кропотливая Ρ€Π°Π±ΠΎΡ‚Π°, ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ соврСмСнных срСд Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π² сСбя способ помСщСния ΠΈΡ… Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ»ΠΈ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ автоматичСски Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ для сборки прилоТСния.

Unix-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° make(1), Ρ€ΠΎΠ΄ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΈΠΊ всСх-этих срСдств, Π±Ρ‹Π»Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π° ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π‘-программистам ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ инструкциями. Она позволяСт ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ зависимости ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… "make-Ρ„Π°ΠΉΠ»Π°Ρ…". ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ make-Ρ„Π°ΠΉΠ» состоит ΠΈΠ· ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€Π°Π²ΠΈΠ», ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π΅ make, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Ρ„Π°ΠΉΠ» зависит ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π° исходных Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ опрСдСляСт дСйствия Π² случаС, Ссли любой ΠΈΠ· Ρ„Π°ΠΉΠ»ΠΎΠ² исходного ΠΊΠΎΠ΄Π° являСтся Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²Ρ‹ΠΌ, Ρ‡Π΅ΠΌ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Ρ„Π°ΠΉΠ». ЀактичСски программисту Π½Π΅ трСбуСтся ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ всС зависимости, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° make способна ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹Ρ… зависимостСй ΠΏΠΎ ΠΈΠΌΠ΅Π½Π°ΠΌ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡΠΌ.

НапримСр, программист ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π² make-Ρ„Π°ΠΉΠ»Π΅, Ρ‡Ρ‚ΠΎ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» myprog зависит ΠΎΡ‚ Ρ‚Ρ€Π΅Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² myprog. ΠΎ, helper. ΠΎ ΠΈ stuff . ΠΎ. Если ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ Ρ„Π°ΠΉΠ»Ρ‹ исходного ΠΊΠΎΠ΄Π° myprog. с, helper. с ΠΈ stuff. с, Ρ‚ΠΎ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° make Π±Π΅Π· ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΡƒΠΊΠ°Π·Π°Π½ΠΈΠΉ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ . ΠΎ-Ρ„Π°ΠΉΠ» зависит ΠΎΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ . с-Ρ„Π°ΠΉΠ»Π°, ΠΈ прСдоставит ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ для сборки .ΠΎ-Ρ„Π°ΠΉΠ»Π°ΠΈΠ· .с-Ρ„Π°ΠΉΠ»Π°.

Π’ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅ make связано с Π²ΠΈΠ·ΠΈΡ‚ΠΎΠΌ ΠΊΠΎ ΠΌΠ½Π΅ Π‘Ρ‚ΠΈΠ²Π° ДТонсона (Steve Johnson β€” Π°Π²Ρ‚ΠΎΡ€ уасс ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ). Когда ΠΎΠ½ ΠΏΡ€ΠΈΡˆΠ΅Π», ΠΎΠ½ Π±Ρ‹Π» ΠΎΡ‡Π΅Π½ΡŒ Π½Π΅Π΄ΠΎΠ²ΠΎΠ»Π΅Π½ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π΅ΠΌΡƒ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ ΠΏΠΎΡ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²ΠΏΡƒΡΡ‚ΡƒΡŽ ΡƒΡ‚Ρ€ΠΎ, занимаясь ΠΎΡ‚Π»Π°Π΄ΠΊΠΎΠΉ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (ошибка Π±Ρ‹Π»Π° устранСна, Ρ„Π°ΠΉΠ» Π½Π΅ Π±Ρ‹Π» ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½, ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π΅Π΅ *. ΠΎ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π»Π°). А ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ я ΠΏΠΎΡ‚Ρ€Π°Ρ‚ΠΈΠ» Ρ‡Π°ΡΡ‚ΡŒ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ Π²Π΅Ρ‡Π΅Ρ€Π°, ΡΠΏΡ€Π°Π²Π»ΡΡΡΡŒ с Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ Π² Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠΌ мною ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅, Ρƒ нас появилась идСя создания инструмСнта для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ. ВсС Π½Π°Ρ‡Π°Π»ΠΎΡΡŒ с Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΌΠ°Π½Π½ΠΎΠΉ ΠΈΠ΄Π΅ΠΈ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° зависимостСй, ΠΏΠΎΡ‚ΠΎΠΌ свСлось ΠΊ Π½Π΅Ρ‡Ρ‚ΠΎ Π±ΠΎΠ»Π΅Π΅ простому ΠΈ Π² Ρ‚Π΅ ΠΆΠ΅ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΠ»ΠΎΡΡŒ Π² make. ИспользованиС инструмСнтов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ всС СшС ΠΎΡΡ‚Π°Π²Π°Π»ΠΈΡΡŒ сырыми, Π±Ρ‹Π»ΠΎ Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΊΡƒΠ»ΡŒΡ‚ΡƒΡ€Ρ‹. МакС-Ρ„Π°ΠΉΠ»Ρ‹ Π±Ρ‹Π»ΠΈ тСкстовыми, Π° Π½Π΅ "волшСбно" Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΌΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это Π±Ρ‹Π»ΠΎ Π² Π΄ΡƒΡ…Π΅ Unix: ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅ΠΌΡ‹ΠΉ, ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹ΠΉ, понятный ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π».