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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«C++. Π‘Π±ΠΎΡ€Π½ΠΈΠΊ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ²Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 20

Автор Π”. БтСфСнс

Π’ Π΄Ρ€ΡƒΠ³ΠΈΡ… случаях скачайтС ΡΠ°ΠΌΡƒΡŽ ΡΠ²Π΅ΠΆΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ GNU make с сайта ftp://ftp.gnu.org/pub/gnu/make, распакуйтС Π΅Π΅ ΠΈ слСдуйтС инструкциям ΠΏΠΎ установкС.

ΠžΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅

Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° make ΠΈΠΌΠ΅Π΅Ρ‚ мноТСство разновидностСй. Π‘ΠΎΠ»ΡŒΡˆΠ°Ρ Ρ‡Π°ΡΡ‚ΡŒ инструмСнтариСв содСрТит собствСнныС Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ make. НапримСр, Visual C++ поставляСтся с ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΎΠΉ, которая называСтся nmake.exe. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ эти спСцифичныС вСрсии make содСрТат встроСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Π»Π΅Π³Ρ‡Π°ΡŽΡ‚ ΠΈΡ… использованиС с ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ инструмСнтариСм. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ обсуТдСниС make, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ мноТСство инструмСнтариСв, Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ нСсколько вСрсий make ΠΈΠ»ΠΈ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π΅Π»ΠΎ с ситуациями, ΠΊΠΎΠ³Π΄Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ вСрсиСй make ΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ инструмСнтариСм Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ соотвСтствия.

ВмСсто Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ нСсколько ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ make, я Ρ€Π΅ΡˆΠΈΠ» ΡΠΊΠΎΠ½Ρ†Π΅Π½Ρ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° GNU make, которая являСтся Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡ‰Π½Ρ‹ΠΌ ΠΈ пСрСносимым Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ make. GNU make Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с GCC. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ использованиС GNU make с Π΄Ρ€ΡƒΠ³ΠΈΠΌ инструмСнтариСм, Π² частности для Windows, ΠΈΠ½ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ GNU make ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ достаточной Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒΡŽ, Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ GNU make с Π½e-GNU-инструмСнтам ΠΈ, Ρ‡Π΅ΠΌ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΡ… make, Ρ‚ΠΈΠΏΠ° nmake.exe, с инструмСнтариСм, ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΌ ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ прСимущСства GNU make происходят ΠΎΡ‚ Π΅Π΅ способности ΠΈΡΠΏΠΎΠ»Π½ΡΡ‚ΡŒ слоТныС сцСнарии ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ. Если Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈ Π² Unix, ΠΈ Π² Windows, Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° Windows cmd.exe оставляСт ΠΆΠ΅Π»Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ большСго; Π² Π½Π΅ΠΉ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΎΠ½Π° ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΡƒΡŽ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ ΠΏΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ сцСнариСв ΠΈ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ ТСсткиС ограничСния Π½Π° Π΄Π»ΠΈΠ½Ρƒ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ссли Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ GNU make ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ cmd.exe, Ρ‚ΠΎ Π΅Π΅ возмоТности Π±ΡƒΠ΄ΡƒΡ‚ сильно ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹. К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, Cygwin ΠΈ MSYS ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ прСкрасныС срСды для использования GNU make Π² Windows.

MSYS прСдоставляСт ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ срСду, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ для запуска Π² Windows make-Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ сцСнариСв configure Π² стилС Unix. Π‘Ρ€Π΅Π΄ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΡ… ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… инструмСнтов ΠΎΠ½Π° прСдоставляСт awk, cat, cp, grep, ls, mkdir, mv, rm, rmdir ΠΈ sed. MSYS Π±Ρ‹Π»Π° ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с GCC ΠΈ прСкрасно с этим справляСтся. Однако с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ инструмСнтариями для Windows, Π² частности Ρ‚Π΅ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ .bat-Ρ„Π°ΠΉΠ»Ρ‹ для установки ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… срСды ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ для ΠΎΠΏΡ†ΠΈΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки слСши (/) вмСсто Ρ‚ΠΈΡ€Π΅ (-), ΠΎΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ нСсколько ΠΌΠ΅Π½Π΅Π΅ Π³Π»Π°Π΄ΠΊΠΎ.

Π’Π°ΠΊ, Π³Π΄Π΅ MSYS минимальна, Cygwin максимальна. Cygwin make ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ всС, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ MSYS make, ΠΈ Π΄Π°ΠΆΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ большС. Однако пСрСносимыС make-Ρ„Π°ΠΉΠ»Ρ‹ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹ ΡƒΠ·ΠΊΠΈΠΌ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠΌ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ GNU, ΠΈ ΠΎΠ½ΠΈ всС ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² MSYS.

Π‘ΠΌΠΎΡ‚Ρ€ΠΈ Ρ‚Π°ΠΊΠΆΠ΅

Π Π΅Ρ†Π΅ΠΏΡ‚ 1.1.

1.15. Π‘Π±ΠΎΡ€ΠΊΠ° простого прилоТСния Β«Hello, WorldΒ» с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ GNU make

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°

Π’Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ GNU make ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Β«Hello, WorldΒ», ΠΏΠΎΠ΄ΠΎΠ±Π½ΡƒΡŽ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ 1.4.

РСшСниС

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π²Ρ‹ Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ свой ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ make-Ρ„Π°ΠΉΠ», Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ, make-Ρ„Π°ΠΉΠ» состоит ΠΈΠ· Π½Π°Π±ΠΎΡ€Π° ΠΏΡ€Π°Π²ΠΈΠ», ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ… Π²ΠΈΠ΄

Ρ†Π΅Π»ΠΈ: ΠΏΡ€Π΅Ρ€Π΅ΠΊΠ²ΠΈΠ·ΠΈΡ‚Ρ‹

 ΠΊΠΎΠΌΠ°Π½Π΄Π°-сцСнарий

Π—Π΄Π΅ΡΡŒ Ρ†Π΅Π»ΠΈ ΠΈ ΠΏΡ€Π΅Ρ€Π΅ΠΊΠ²ΠΈΠ·ΠΈΡ‚Ρ‹ β€” это строки, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ, Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°-сцСнарий состоит ΠΈΠ· нуля ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ строк тСкста, каТдая ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… начинаСтся с символа табуляции (Tab). Π¦Π΅Π»ΠΈ ΠΈ ΠΏΡ€Π΅Ρ€Π΅ΠΊΠ²ΠΈΠ·ΠΈΡ‚Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ², Π½ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой просто Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° дСйствий, выполняСмых make. ΠšΠΎΠΌΠ°Π½Π΄Π½Ρ‹ΠΉ сцСнарий состоит ΠΈΠ· ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… Π² ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΡƒ. Π“Ρ€ΡƒΠ±ΠΎ говоря, ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ make ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°Π±ΠΎΡ€ Ρ†Π΅Π»Π΅ΠΉ ΠΈΠ· Π½Π°Π±ΠΎΡ€Π° ΠΏΡ€Π΅Ρ€Π΅ΠΊΠ²ΠΈΠ·ΠΈΡ‚ΠΎΠ², Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² для этого ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹ΠΉ сцСнарий.

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

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ. Π’ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ, содСрТащСй исходныС Ρ„Π°ΠΉΠ»Ρ‹, создайтС тСкстовый Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ makefile. Π’ этом Ρ„Π°ΠΉΠ»Π΅ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚Π΅ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Ρ†Π΅Π»ΠΈ. ΠŸΠ΅Ρ€Π²ΡƒΡŽ Ρ†Π΅Π»ΡŒ Π½Π°Π·ΠΎΠ²ΠΈΡ‚Π΅ all ΠΈ Π² качСствС Π΅Π΅ ΠΏΡ€Π΅Ρ€Π΅ΠΊΠ²ΠΈΠ·ΠΈΡ‚Π° ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ имя собираСмого исполняСмого Ρ„Π°ΠΉΠ»Π°. Она Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠ³ΠΎ сцСнария. Π’Ρ‚ΠΎΡ€ΠΎΠΉ Ρ†Π΅Π»ΠΈ присвойтС имя исполняСмого Ρ„Π°ΠΉΠ»Π°. Π’ качСствС Π΅Π΅ ΠΏΡ€Π΅Ρ€Π΅ΠΊΠ²ΠΈΠ·ΠΈΡ‚ΠΎΠ² ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ ΠΈΠΌΠ΅Π½Π° исходных Ρ„Π°ΠΉΠ»ΠΎΠ², Π° Π² качСствС ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠ³ΠΎ сцСнария ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ трСбуСтся Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ для сборки исполняСмого Ρ„Π°ΠΉΠ»Π° ΠΈΠ· исходных Ρ„Π°ΠΉΠ»ΠΎΠ². Π’Ρ€Π΅Ρ‚ΡŒΡ Ρ†Π΅Π»ΡŒ Π΄ΠΎΠ»ΠΆΠ½Π° Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ install. Π£ Π½Π΅Π΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅Ρ€Π΅ΠΊΠ²ΠΈΠ·ΠΈΡ‚ΠΎΠ² ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹ΠΉ сцСнарий, ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ исполняСмый Ρ„Π°ΠΉΠ» ΠΈΠ· Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ, содСрТащСй make-Ρ„Π°ΠΉΠ», Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ, Π³Π΄Π΅ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ установлСн. ПослСдняя Ρ†Π΅Π»ΡŒ Π΄ΠΎΠ»ΠΆΠ½Π° Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ clean. Как ΠΈ install, ΠΎΠ½Π° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΡ€Π΅Ρ€Π΅ΠΊΠ²ΠΈΠ·ΠΈΡ‚ΠΎΠ². Π•Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹ΠΉ сцСнарий Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΈΠ· Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ исполняСмый Ρ„Π°ΠΉΠ» ΠΈ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹. Π¦Π΅Π»ΠΈ clean ΠΈ install Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ ΠΊΠ°ΠΊ phony targets (Ρ„ΠΈΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ Ρ†Π΅Π»ΠΈ), для Ρ‡Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ PHONY.

НапримСр, Ρ‡Ρ‚ΠΎΠ±Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ GCC ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ исполняСмый Ρ„Π°ΠΉΠ» ΠΈΠ· исходного ΠΊΠΎΠ΄Π° ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° 1.4, make-Ρ„Π°ΠΉΠ» ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΈΠ΄, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ 1.14.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 1.14. make-Ρ„Π°ΠΉΠ» для сборки исполняСмого Ρ„Π°ΠΉΠ»Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ GCC

# Π­Ρ‚ΠΎ Ρ†Π΅Π»ΡŒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, которая Π±ΡƒΠ΄Π΅Ρ‚ собрана ΠΏΡ€ΠΈ

# Π²Ρ‹Π·ΠΎΠ²Π΅ make

.PHONY: all

all: hello


# Π­Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ make, ΠΊΠ°ΠΊ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ hello ΠΈΠ· hello.cpp

hello: hello.cpp

    g++ -o hello hello.cpp


# Π­Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ make ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ hello Π² ΠΏΠΎΠ΄Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ binaries,

# создав Π΅Π΅, Ссли трСбуСтся

.PHONY: install

install:

    mkdir -p binaries

    cp -p hello binaries


# Π­Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ make ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ hello ΠΈ hello.ΠΎ

.PHONY: clean

clean:

    rm -f hello

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ исполняСмый Ρ„Π°ΠΉΠ» ΠΈΠ· исходного ΠΊΠΎΠ΄Π° ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° 1.4 с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Visual Π‘++, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ make-Ρ„Π°ΠΉΠ», ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ 1.15.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 1.15. make-Ρ„Π°ΠΉΠ» для сборки исполняСмого Ρ„Π°ΠΉΠ»Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Visual Π‘++.

#Ρ†Π΅Π»ΡŒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ

.PHONY: all

all: hello.exe


#ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ для сборки hello.exe

hello.exe: hello.cpp

    cl -nologo -EHsc -GR -Zc:forScope -Zc:wchar_t \

    -Fehello hello.cpp


.PHONY: install

install:

    mkdir -ΠΎ binaries

    cp -p hello.exe binaries


.PHONY: clean

clean:

    rm -f hello.exe

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ списки Ρ†Π΅Π»Π΅ΠΉ ΠΈΠ»ΠΈ ΠΏΡ€Π΅Ρ€Π΅ΠΊΠ²ΠΈΠ·ΠΈΡ‚ΠΎΠ² ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ нСсколько строк тСкста make-Ρ„Π°ΠΉΠ»Π°, для Ρ‡Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ символ продолТСния строки \, ΠΊΠ°ΠΊ ΠΈ Π² исходных Ρ„Π°ΠΉΠ»Π°Ρ… Π‘++.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ исполняСмый Ρ„Π°ΠΉΠ», установитС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ срСды, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для инструмСнтов ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ makefile, ΠΈ Π²Π²Π΅Π΄ΠΈΡ‚Π΅ make. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ исполняСмый Ρ„Π°ΠΉΠ» Π² ΠΏΠΎΠ΄Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ binaries, Π²Π²Π΅Π΄ΠΈΡ‚Π΅ make install. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΈΠ· Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ make-Ρ„Π°ΠΉΠ»Π° исполняСмый Ρ„Π°ΠΉΠ» ΠΈ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», Π²Π²Π΅Π΄ΠΈΡ‚Π΅ make clean.

Если Π²Ρ‹ установили срСду Cygwin, ΠΎΠΏΠΈΡΠ°Π½Π½ΡƒΡŽ Π² Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π΅ 1.1, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ make-Ρ„Π°ΠΉΠ» ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° 1.15 нСпосрСдствСнно ΠΈΠ· ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ Windows cmd.exe.

Π’Π°ΠΊΠΆΠ΅ этот make-Ρ„Π°ΠΉΠ» ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΈΠ· ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ Cygwin, ΠΊΠ°ΠΊ описано Π΄Π°Π»Π΅Π΅. Π’ cmd.exe запуститС vcvars32.bat, ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ срСды Visual Π‘++. Π—Π°Ρ‚Π΅ΠΌ запуститС cygwin.bat, Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΡƒ Cygwin. Если дирСктория установки Cygwin Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π² PATH, Ρ‚ΠΎ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΡƒ Cygwin ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΈΠ· cmd.exe, просто ввСдя cygwin. НаконСц, ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ make-Ρ„Π°ΠΉΠ», ΠΈ Π²Π²Π΅Π΄ΠΈΡ‚Π΅ make.

Аналогично ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ make-Ρ„Π°ΠΉΠ» ΠΈΠ· ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ MSYS: Π² cmd.exe запуститС vcvars32.bat, Π·Π°Ρ‚Π΅ΠΌ запуститС msys.bat, Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΡƒ MSYS.

Если ваш инструмСнтарий прСдоставляСт сцСнарий для установки ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… срСды, запуск make-Ρ„Π°ΠΉΠ»Π° ΠΈΠ· Cygwin ΠΈΠ»ΠΈ MSYS нСсколько Π±ΠΎΠ»Π΅Π΅ Ρ‚Ρ€ΡƒΠ΄ΠΎΠ΅ΠΌΠΎΠΊ, Ρ‡Π΅ΠΌ Π΅Π³ΠΎ запуск ΠΈΠ· cmd.exe. Однако для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… make-Ρ„Π°ΠΉΠ»ΠΎΠ² это ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ условиС, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈΠ·-ΠΏΠΎΠ΄ cmd.exe.

ΠžΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅

Π’ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π°Ρ… Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ GNU make являСтся достаточно ΠΌΠΎΡ‰Π½Ρ‹ΠΌ инструмСнтом для сборки слоТных ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ². Но Ρ‡Ρ‚ΠΎ ΠΆΠ΅ ΠΎΠ½Π° Π΄Π΅Π»Π°Π΅Ρ‚? Π’ΠΎΡ‚ ΠΊΠ°ΠΊ ΠΎΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ make Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΎΠ½Π° просматриваСт Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ Π² поисках Ρ„Π°ΠΉΠ»Π° с ΠΈΠΌΠ΅Π½Π΅ΠΌ GNUmakefile, makefile ΠΈΠ»ΠΈ Makefile ΠΈ пытаСтся ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽΡΡ Π² Π½Π΅ΠΌ Ρ†Π΅Π»ΡŒ, которая называСтся Ρ†Π΅Π»ΡŒΡŽ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (default target). Если Ρ†Π΅Π»ΡŒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π½Π΅ устарСла, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° сущСствуСт, всС Π΅Π΅ ΠΏΡ€Π΅Ρ€Π΅ΠΊΠ²ΠΈΠ·ΠΈΡ‚Ρ‹ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ… Π½Π΅ Π±Ρ‹Π» ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π΅Π΅ сборки, Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π° make Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½Π°. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΎΠ½Π° пытаСтся ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ†Π΅Π»ΡŒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΠ· Π΅Π΅ ΠΏΡ€Π΅Ρ€Π΅ΠΊΠ²ΠΈΠ·ΠΈΡ‚ΠΎΠ², Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹ΠΉ сцСнарий. Аналогично ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ устарСвания этот процСсс рСкурсивСн: для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅Π³ΠΎ ΠΏΡ€Π΅Ρ€Π΅ΠΊΠ²ΠΈΠ·ΠΈΡ‚Π° make ΠΈΡ‰Π΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, содСрТащСС этот ΠΏΡ€Π΅Ρ€Π΅ΠΊΠ²ΠΈΠ·ΠΈΡ‚ Π² качСствС Ρ†Π΅Π»ΠΈ, ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ вСсь процСсс Π·Π°Π½ΠΎΠ²ΠΎ. Π’Π°ΠΊ продолТаСтся Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Ρ†Π΅Π»ΡŒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π° ΠΈΠ»ΠΈ ΠΏΠΎΠΊΠ° Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ ошибка.