Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π° make

Makefile для самых ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΈΡ…

НС ΠΎΡ‡Π΅Π½ΡŒ строгий ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° mrbook.org/tutorials/make МнС Π² своС врСмя ΠΎΡ‡Π΅Π½ΡŒ Π½Π΅ Ρ…Π²Π°Ρ‚ΠΈΠ»ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‡ΠΊΠΈ для понимания Π±Π°Π·ΠΎΠ²Ρ‹Ρ… Π²Π΅Ρ‰Π΅ΠΉ ΠΎ make. Π”ΡƒΠΌΠ°ΡŽ, Π±ΡƒΠ΄Π΅Ρ‚ Ρ…ΠΎΡ‚ΡŒ ΠΊΠΎΠΌΡƒ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ интСрСсно. Π₯отя эта тСхнология ΠΈ ΠΎΡ‚ΠΌΠΈΡ€Π°Π΅Ρ‚, Π½ΠΎ всС Ρ€Π°Π²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…. ΠšΠ°Ρ€ΠΌΡ‹ Π½Π° Ρ…Π°Π± Β«ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‹Β» Π½Π΅ Ρ…Π²Π°Ρ‚ΠΈΠ»ΠΎ, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ появится Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ β€” добавлю ΠΈ Ρ‚ΡƒΠ΄Π°. Π”ΠΎΠ±Π°Π²ΠΈΠ» Π² ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‹. Если Π΅ΡΡ‚ΡŒ ошибки Π² ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΠΈ, Ρ‚ΠΎ ΠΏΡ€ΠΎΡˆΡƒ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π° Π½ΠΈΡ…. Π‘ΡƒΠ΄Ρƒ ΠΈΡΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ.

Π‘Ρ‚Π°Ρ‚ΡŒΡ Π±ΡƒΠ΄Π΅Ρ‚ интСрСсная ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΈΠ·ΡƒΡ‡Π°ΡŽΡ‰ΠΈΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° C/C++ Π² UNIX-ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… систСмах ΠΎΡ‚ самых ΠΊΠΎΡ€Π½Π΅ΠΉ, Π±Π΅Π· использования IDE.

ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Ρ€ΡƒΡ‡ΠΊΠ°ΠΌΠΈ β€” занятиС вСсьма ΡƒΡ‚ΠΎΠΌΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅, особСнно ΠΊΠΎΠ³Π΄Π° исходных Ρ„Π°ΠΉΠ»ΠΎΠ² становится большС ΠΎΠ΄Π½ΠΎΠ³ΠΎ, ΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ… Π½Π°Π΄ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· Π½Π°Π±ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ компиляции ΠΈ Π»ΠΈΠ½ΠΊΠΎΠ²ΠΊΠΈ. Но Π½Π΅ всС Ρ‚Π°ΠΊ ΠΏΠ»ΠΎΡ…ΠΎ. БСйчас ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠœΠ΅ΠΉΠΊΡ„Π°ΠΉΠ»Ρ‹. Makefile β€” это Π½Π°Π±ΠΎΡ€ инструкций для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ make, которая ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ Π² ΠΎΠ΄Π½ΠΎ касаниС.

Для ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ понадобится ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ микроскопичСский ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π°-ля Hello World ΠΈΠ· Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅:

ВсС скопом ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ ΠΎΡ‚ΡΡŽΠ΄Π°
Автор использовал язык C++, Π·Π½Π°Ρ‚ΡŒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ совсСм Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΈ компилятор g++ ΠΈΠ· gcc. Π›ΡŽΠ±ΠΎΠΉ Π΄Ρ€ΡƒΠ³ΠΎΠΉ компилятор скорСС всСго Ρ‚ΠΎΠΆΠ΅ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ‚. Π€Π°ΠΉΠ»Ρ‹ слСгка ΠΏΠΎΠ΄ΠΏΡ€Π°Π²Π»Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ±ΠΈΡ€Π°Π»ΠΈΡΡŒ gcc 4.7.1

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° make
ΠŸΡ€ΠΎΡ†Π΅ΡΡ сборки

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π±Π΅Ρ€Π΅Ρ‚ Ρ„Π°ΠΉΠ»Ρ‹ с исходным ΠΊΠΎΠ΄ΠΎΠΌ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΈΠ· Π½ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹. Π—Π°Ρ‚Π΅ΠΌ Π»ΠΈΠ½ΠΊΠΎΠ²Ρ‰ΠΈΠΊ Π±Π΅Ρ€Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΈΠ· Π½ΠΈΡ… исполняСмый Ρ„Π°ΠΉΠ». Π‘Π±ΠΎΡ€ΠΊΠ° = компиляция + Π»ΠΈΠ½ΠΊΠΎΠ²ΠΊΠ°.

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ Ρ€ΡƒΠΊΠ°ΠΌΠΈ
Π‘Π°ΠΌΡ‹ΠΉ простой ΠœΠ΅ΠΉΠΊΡ„Π°ΠΉΠ»

Π’ Π½Π΅ΠΌ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ части:

Для нашСго ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΌΠ΅ΠΉΠΊΡ„Π°ΠΉΠ» Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

ИспользованиС зависимостСй

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСсколько Ρ†Π΅Π»Π΅ΠΉ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΌΠ΅ΠΉΠΊΡ„Π°ΠΉΠ»Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ². Π­Ρ‚ΠΎ связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π½Π΅ понадобится ΠΏΠ΅Ρ€Π΅ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ вСсь ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Π° ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ пСрСсборкой Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½ΠΎΠΉ части. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

Π­Ρ‚ΠΎ Π½Π°Π΄ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ Makefile-2 всС Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅

ИспользованиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π²

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² ΠΌΠ΅ΠΉΠΊΡ„Π°ΠΉΠ»Π°Ρ…. НапримСр, это ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ способ ΡƒΡ‡Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠΌ компилятором ΠΈΠ»ΠΈ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ опциями.

Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ дальшС

ПослС этого ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ³ΠΎ инструктаТа ΡƒΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ простыС ΠΌΠ΅ΠΉΠΊΡ„Π°ΠΉΠ»Ρ‹ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ. Π”Π°Π»ΡŒΡˆΠ΅ Π½Π°Π΄ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹Π΅ ΡƒΡ‡Π΅Π±Π½ΠΈΠΊΠΈ ΠΈ руководства. Как Ρ„ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ Π°ΠΊΠΊΠΎΡ€Π΄ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΈ ΠΎΡΠΎΠ·Π½Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅ΠΉΠΊΡ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π² Π΄Π²Π° касания Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ практичСски любой ΠΏΡ€ΠΎΠ΅ΠΊΡ‚:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² make

НазначСниС, история, Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹

Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° make ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ сборки ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ². Если ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ Ρ„Π°ΠΉΠ»Ρ‹ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ сгСнСрированы ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ², ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ процСсс построСния Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ способом, ΠΏΠΎ возмоТности минимизируя количСство ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ².

Π˜ΡΡ‚ΠΎΡ€ΠΈΡ‡Π΅ΡΠΊΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π°Π»Π°ΡΡŒ для сборки ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Π½Π° языкС C Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС Unix, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π»ΡŽΠ±Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌΠΈ. ΠŸΠ΅Ρ€Π²Π°Ρ вСрсия систСмы Π±Ρ‹Π»Π° создана Π² 1977 Π³ΠΎΠ΄Ρƒ.

На сСгодняшний дСнь Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСны Ρ‚Ρ€ΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹, ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Π½Ρ‹Π΅ ΠΎΠ±Ρ‰ΠΈΠΌΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°ΠΌΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹, Π½ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‰ΠΈΠ΅ΡΡ синтаксисом языка ΠΈ возмоТностями:

ΠœΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ с GNU make. На BSD систСмах (Π² частности, FreeBSD, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ доступСн ΠΊΠ°ΠΊ gmake, Π½Π° Linux β€” просто make).

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹

Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° make Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ (rules), записанным Π² ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅. ΠŸΡ€Π°Π²ΠΈΠ»Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ Ρ†Π΅Π»ΠΈ (targets), завимости ΠΌΠ΅ΠΆΠ΄Ρƒ цСлями ΠΈ Π½Π°Π±ΠΎΡ€ ΠΊΠΎΠΌΠ°Π½Π΄ для выполнСния ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ†Π΅Π»ΠΈ.

Π¦Π΅Π»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ Ρ„Π°ΠΉΠ»Π°ΠΌ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ†Π΅Π»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠΌΡƒ Ρ„Π°ΠΉΠ»Ρƒ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ†Π΅Π»Π΅ΠΉ ΠΈΠ»ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄. Π’Π°ΠΊΠΈΠ΅ Ρ†Π΅Π»ΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ phony targets.

КаТдая Ρ†Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ выполнСния Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ†Π΅Π»Π΅ΠΉ. Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ†Π΅Π»ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ выполнСния Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ†Π΅Π»Π΅ΠΉ, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ½Π° зависит.

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

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, makefile опрСдСляСт Π³Ρ€Π°Ρ„ зависимостСй, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° make выполняСт Ρ‚Ρƒ ΠΈΠ»ΠΈ ΠΈΠ½ΡƒΡŽ Ρ†Π΅Π»ΡŒ, ΠΏΠΎ возмоТности минимизируя количСство ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ сборки.

Запуск make

ΠŸΡ€ΠΈ запускС make ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ†Π΅Π»ΡŒ, которая Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π°. Если Ρ†Π΅Π»ΡŒ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ†Π΅Π»ΡŒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, которая Π»ΠΈΠ±ΠΎ ΡƒΠΊΠ°Π·Π°Π½Π° Π² Ρ„Π°ΠΉΠ»Π΅ ΠΏΡ€Π°Π²ΠΈΠ» явно, Π»ΠΈΠ±ΠΎ нСявно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ пСрвая опрСдСлСнная Ρ†Π΅Π»ΡŒ.

Π―Π²Π½ΠΎΠ΅ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ Ρ†Π΅Π»ΠΈ выполняСтся инструкциСй DEFAULT_GOAL Π² Makefile :

МоТно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ сразу нСсколько Ρ†Π΅Π»Π΅ΠΉ.

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ†Π΅Π»Π΅ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ настроСно с использованиСм ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… (ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½ΠΈΠΆΠ΅). ΠŸΡ€ΠΈ запускС make ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…:

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ PREFIX Π±ΡƒΠ΄Π΅Ρ‚ доступно Π² ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ… Makefile ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использовано ΠΏΡ€ΠΈ сборкС.

Команда ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ ряд Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠΏΡ†ΠΈΠΉ, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅:

Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ синтаксис make

ΠŸΠ΅Ρ€Π΅Π΄ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ Π²Π½ΡƒΡ‚Ρ€ΠΈ описания Ρ†Π΅Π»ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ символ табуляции. Π’ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅, это настраиваСтся, Π½ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ общСпринятыС соглашСния. Если вмСсто табуляции ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹, make Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚.

PHONY targets

Π¦Π΅Π»ΠΈ, Π½Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°ΠΌ, ΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ для выполнСния Π½Π°Π±ΠΎΡ€Π° ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈΠ»ΠΈ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ завимостСй, Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

БоотвСтствСнно, Π² Makefile ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ:

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅

Π’ make-Ρ„Π°ΠΉΠ»Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, хотя ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π΅Π΅ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ макросы.

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ присваиваниСм Π² makefile ΠΈΠ»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Ρ‹ ΠΈΠ·Π²Π½Π΅.

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ β€” это макроопрСдСлСния, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ вычислСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ всСгда выполняСтся Π² самый послСдний ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄ подстановкой. ΠœΠ°ΠΊΡ€ΠΎΡΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Π΅Π·Π΄Π΅ Π² тСкстС makefile.

БоотвСтствСнно, Ссли ΠΌΡ‹ Π²Ρ‹Π·ΠΎΠ²Π΅ΠΌ

Если пСрСмСнная содСрТит нСсколько строк, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ синтаксис define :

АвтоматичСскиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ www/js/script.js Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ объСдинСния Ρ‚Ρ€Π΅Ρ… js-Ρ„Π°ΠΉΠ»ΠΎΠ².

ΠŸΠΎΠ»Π½Ρ‹ΠΉ список Ρ‚Π°ΠΊΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, для нас Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ интСрСсны:

Π‘ ΠΏΠΎΠ»Π½Ρ‹ΠΌ списком ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ: Automatic Variables.

УсловноС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅

Π’ Makefile ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ условныС выраТСния. ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ ΠΌΠ°ΠΊΡ€ΠΎΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ make, соотвСтствСнно, условныС выраТСния Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ makefile, Π° Π½Π΅ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΊΠΎΠΌΠ°Π½Π΄. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ условныС выраТСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для опрСдСлСния Ρ‚Π΅Ρ… ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹Ρ… Ρ†Π΅Π»Π΅ΠΉ Π² зависимости ΠΎΡ‚ значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. НапримСр:

Π’ качСствС условий ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅:

ΠŸΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ с возмоТностями условных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ: Conditional syntax.

Π¨Π°Π±Π»ΠΎΠ½Π½Ρ‹Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°

Π¨Π°Π±Π»ΠΎΠ½Π½Ρ‹Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° (pattern rules) ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ прСобразования ΠΎΠ΄Π½ΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ² Π² Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π½Π° основании зависимостСй ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΈΡ… ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ. НапримСр, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ для получСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° ΠΈΠ· Ρ„Π°ΠΉΠ»Π° Π½Π° языкС C:

Π¨Π°Π±Π»ΠΎΠ½Ρ‹ Π½Π΅ обязаны ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡΠΌΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ². Если исходныС ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Ρƒ ΠΈ Π² ΠΈΡ… ΠΈΠΌΠ΅Π½Π°Ρ… Π΅ΡΡ‚ΡŒ какая-Π»ΠΈΠ±ΠΎ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ pattern rule.

Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ² make

Π€Π°ΠΉΠ» make ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„Π°ΠΉΠ»Ρ‹ make ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ include :

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΈΠ· Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΡƒΡŽ систСму, часто ΠΈΠΌΠ΅Π΅Ρ‚ смысл Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ include Π²Π½ΡƒΡ‚Ρ€ΠΈ условного ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Make опрСдСляСт большой Π½Π°Π±ΠΎΡ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… (макросах). Π’Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ выполняСтся конструкциСй:

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ строки, ΠΈΠΌΠ΅Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ»Ρ‹ ΠΏΠΎ Π½Π°Π±ΠΎΡ€Ρƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ условный Π²Ρ‹Π·ΠΎΠ² Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

НСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ΠΈΠ· hive. ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ врСмя (ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° использованиС := :

Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° container.mk Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² случаС, Ссли ΠΎΠ½ сущСствуСт:

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ прСфиксов ΠΈ суффиксов ΠΊ ΠΈΠΌΠ΅Π½Π°ΠΌ Ρ„Π°ΠΉΠ»ΠΎΠ²

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ функциях ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Functions.

БобствСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

ΠžΡ‡Π΅Π½ΡŒ Ρ‚ΡƒΠΏΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ:

РСкурсивный make

Помимо Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° make, Makefile ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„Π°ΠΉΠ» make Π² Π²ΠΈΠ΄Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ make-процСсса.

Для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Ρ„Π°ΠΉΠ» ΠΈΡ… Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ явно ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ:

ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΉ make

Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ†Π΅Π»ΠΈ

Make ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π½Π°Π±ΠΎΡ€ Ρ†Π΅Π»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ ΠΊΠ°ΠΊ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ†Π΅Π»Π΅ΠΉ Π»ΠΈΠ±ΠΎ ΠΊΠ°ΠΊ слуТСбныС инструкции. Π’ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ†Π΅Π»Π΅ΠΉ:

Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ использования

Π§Π°Ρ‰Π΅ всСго ΠΎ make говорят Π² контСкстС сборки ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° C/C++, Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ², для этого ΠΎΠ½ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ прСдназначался. Однако, make Β­β€” Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ инструмСнт. Записывая makefile, ΠΌΡ‹ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎ описываСм ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ состояниС ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ запуск make Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ‚Π°Ρ€Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ. Π”Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ опрСдСлСния состояния ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π΅Π½, Π² случаС использования ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ языка (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, shell) Π½Π°ΠΌ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ Π±Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ большоС количСство Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ, получая Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ слоТный ΠΈ Π·Π°ΠΏΡƒΡ‚Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, использованиС зависимостСй ΠΌΠ΅ΠΆΠ΄Ρƒ phony targets, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΈ, ΠΏΠΎ сути, Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΈΠΉ (ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ) ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ для написания Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… административных сцСнариСв. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ make Π² качСствС каркаса для выполнСния Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… shell-ΠΊΠΎΠΌΠ°Π½Π΄, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΏΠΎ сути Π½Π΅ΠΊΠΈΠΉ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ framework для shell с Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ интСрфСйсом (Π²Ρ‹Π·ΠΎΠ² make + ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…), встроСнными срСдствами отслСТивания зависимостСй, ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ выполнСния, макроопрСдСлСниями ΠΈ Ρ‚.Π΄.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π±Π°Π·ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Π½ΠΈΠ΅ make позволяСт Π² рядС случаСв Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΏΡƒΡΡ‚ΡŒ ΠΈ Π½Π΅ самым красивым, Π½ΠΎ Π·Π°Ρ‚ΠΎ быстрым ΠΈ достаточно Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΌ способом.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Makefile ΠΈ ΠΊΠ°ΠΊ Π½Π°Ρ‡Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ

Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π° make. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π° make. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π° make. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π° make. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π° make

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π’ ΠΆΠΈΠ·Π½ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΡ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² найдётся история ΠΏΡ€ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ дСнь с Π½ΠΎΠ²Ρ‹ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ. ПослС клонирования основного рСпозитория ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° наступаСт этап, ΠΊΠΎΠ³Π΄Π° приходится Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ мноТСство ΠΊΠΎΠΌΠ°Π½Π΄ с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΌΠΈ Ρ„Π»Π°Π³Π°ΠΌΠΈ ΠΈ Π² Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π‘Π΅Π· описания ΠΊΠΎΠΌΠ°Π½Π΄, Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв, Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ Ρ‡Ρ‚ΠΎ происходит, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Π­Ρ‚ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ лишь Ρ‡Π°ΡΡ‚ΡŒΡŽ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ Ρ€Π°Π·Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ сами ΠΏΠΎ сСбС Π΄Π»ΠΈΠ½Π½Ρ‹Π΅, содСрТат ΠΌΠ½ΠΎΠ³ΠΎ Ρ„Π»Π°Π³ΠΎΠ², Π° Π·Π½Π°Ρ‡ΠΈΡ‚, ΠΈΡ… Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Π½ΠΎ ΠΈ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ. ΠŸΠΎΡΡ‚ΠΎΡΠ½Π½ΠΎ вСсти Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ становится слоТнСС с ростом ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΠΎΠ½Π° Π½Π΅ΠΈΠ·Π±Π΅ΠΆΠ½ΠΎ устарСваСт, Π° ΠΏΠΎΡ€ΠΎΠ³ Π²Ρ…ΠΎΠ΄Π° для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ² становится Π²Ρ‹ΡˆΠ΅, вСдь ΡƒΠΆΠ΅ Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ Π² состоянии Π²ΡΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ всСх Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. НСкоторыС Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ дСнь, ΠΈ Π΄Π°ΠΆΠ΅ Π½Π΅ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· Π² дСнь.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ make ΠΈ Makefile

Makefile β€” это Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ хранится вмСстС с ΠΊΠΎΠ΄ΠΎΠΌ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ. Π•Π³ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ Π² ΠΊΠΎΡ€Π΅Π½ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Он выступаСт ΠΈ ΠΊΠ°ΠΊ докумСнтация, ΠΈ ΠΊΠ°ΠΊ исполняСмый ΠΊΠΎΠ΄. ΠœΠ΅ΠΉΠΊΡ„Π°ΠΉΠ» скрываСт Π·Π° собой Π΄Π΅Ρ‚Π°Π»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ раскладываСт β€œΠΏΠΎ полочкам” ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Π° ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° make запускаСт ΠΈΡ… ΠΈΠ· Ρ‚ΠΎΠ³ΠΎ ΠΌΠ΅ΠΉΠΊΡ„Π°ΠΉΠ»Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ находится Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ.

Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ make ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π°Π»Π°ΡΡŒ для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ сборки исполняСмых ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΈΠ· исходного ΠΊΠΎΠ΄Π°. Она ΠΏΠΎΡΡ‚Π°Π²Π»ΡΠ»Π°ΡΡŒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ *nix дистрибутивов, Ρ‡Ρ‚ΠΎ ΠΈ ΠΏΡ€ΠΈΠ²Π΅Π»ΠΎ ΠΊ Π΅Ρ‘ ΡˆΠΈΡ€ΠΎΠΊΠΎΠΌΡƒ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½Π΅Π½ΠΈΡŽ ΠΈ повсСмСстному использованию. ПозТС оказалось Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹ΠΉ инструмСнт ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π»ΡŽΠ±Ρ‹Ρ… Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ процСсс Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ своём сводится ΠΊ Ρ‚Π΅ΠΌ ΠΆΠ΅ Π·Π°Π΄Π°Ρ‡Π°ΠΌ β€” автоматизация ΠΈ сборка ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΉΠΊΠ° Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… стало стандартом для ΠΌΠ½ΠΎΠ³ΠΈΡ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΊΡ€ΡƒΠΏΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΌΠ΅ΠΉΠΊΡ„Π°ΠΉΠ»Π° ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Ρƒ Ρ‚Π°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠ°ΠΊ Kubernetes, Babel, Ansible ΠΈ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, повсСмСстно Π½Π° Π₯СкслСтС.

Бинтаксис Makefile

make запускаСт Ρ†Π΅Π»ΠΈ ΠΈΠ· Makefile, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ состоят ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄:

Но нСдостаточно просто Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅ΠΉΠΊΡ„Π°ΠΉΠ» Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ эффСкт ΠΎΡ‚ Π΅Π³ΠΎ внСдрСния, понадобится ΠΏΠΎΡ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄ Π½Π° Ρ†Π΅Π»ΠΈ, Π° цСлям Π΄Π°Ρ‚ΡŒ сСмантичСски подходящиС ΠΈΠΌΠ΅Π½Π°. ΠŸΠΎΠ½Π°Ρ‡Π°Π»Ρƒ, пСрСнос ΠΊΠΎΠΌΠ°Π½Π΄ Π² Makefile ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ свалкС всСх ΠΊΠΎΠΌΠ°Π½Π΄ Π² ΠΎΠ΄Π½Ρƒ Ρ†Π΅Π»ΡŒ с Β«Ρ€Π°Π·ΠΌΡ‹Ρ‚Ρ‹ΠΌΒ» Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ:

Π—Π΄Π΅ΡΡŒ происходит сразу нСсколько дСйствий: созданиС Ρ„Π°ΠΉΠ»Π° с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ окруТСния, ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, гСнСрация ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, установка зависимостСй ΠΈ запуск ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π­Ρ‚ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΈΠ· ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² ΠΈ названия Ρ†Π΅Π»ΠΈ, поэтому Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ эти нСзависимыС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π½Π° Ρ€Π°Π·Π½Ρ‹Π΅ Ρ†Π΅Π»ΠΈ:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ достаточно двумя ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ:

Благодаря ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ Makefile, ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° вмСстС с Ρ„Π»Π°Π³Π°ΠΌΠΈ свСдСны Π² Makefile. Он обСспСчиваСт ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ порядок выполнСния ΠΈ Π½Π΅ Π²Π°ΠΆΠ½ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΡ€ΠΈ этом задСйствованы языки ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ.

ΠŸΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚ΠΎΠ΅ использованиС

Ѐальшивая Ρ†Π΅Π»ΡŒ

ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ запуск ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ошибок

Π‘Π°ΠΌΡ‹ΠΉ простой (Π½ΠΎ Π½Π΅ СдинствСнный) способ Β«Π·Π°Π³Π»ΡƒΡˆΠΈΡ‚ΡŒΒ» ΠΎΡˆΠΈΠ±ΠΊΡƒ β€” это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ логичСскоС Π˜Π›Π˜ прямо Π² ΠΌΠ΅ΠΉΠΊΡ„Π°ΠΉΠ»Π΅:

Π”ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ Ρ…Π°ΠΊΠΈ стоит с ΠΎΡΡ‚ΠΎΡ€ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Β«Π²Ρ‹ΡΡ‚Ρ€Π΅Π»ΠΈΡ‚ΡŒ сСбС Π² Π½ΠΎΠ³ΡƒΒ» Π² Π±ΠΎΠ»Π΅Π΅ слоТных случаях.

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅

Π—Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ Π² ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΏΠΎΠ΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ для ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, указания ΠΏΡƒΡ‚Π΅ΠΉ, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния ΠΈ make Ρ‚ΠΎΠΆΠ΅ позволяСт этим ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ прямо Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠ΅ΠΉΠΊΡ„Π°ΠΉΠ»Π° ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΡ… ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅:

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΈ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡ… ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΌΠ΅ΠΉΠΊΡ„Π°ΠΉΠ»Π°.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π² ΠΌΠ΅ΠΉΠΊΡ„Π°Π»Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ многострочныС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΊΠ°ΠΊ Β«ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ»Π΅ΠΉΒ» ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π°ΠΌΠΈ языков ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°ΠΌΠΈ. Широкая Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½Ρ‘Π½Π½ΠΎΡΡ‚ΡŒ этого инструмСнта ΠΈ общая простота ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² свой ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ достаточно Π»Π΅Π³ΠΊΠΎ, Π±Π΅Π· нСобходимости Π΄ΠΎΡ€Π°Π±ΠΎΡ‚ΠΎΠΊ. Но ΠΌΠ΅ΠΉΠΊΡ„Π°ΠΉΠ» ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎ-настоящСму большим ΠΈ слоТным, это ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ²:

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹

ΠœΠ΅ΠΉΠΊΡ„Π°ΠΉΠ»Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΈ составлСнии Π³Π°ΠΉΠ΄Π°:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ПониманиС команд Unix и Linux: make

ЦСль ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ make – автоматичСски ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ части большой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ для ΠΈΡ… пСрСкомпиляции. Π’ руководствС описана рСализация make для GNU, написанная Π ΠΈΡ‡Π°Ρ€Π΄ΠΎΠΌ Π‘Ρ‚ΠΎΠ»Π»ΠΌΠ°Π½ΠΎΠΌ ΠΈ Π ΠΎΠ»Π°Π½Π΄ΠΎΠΌ ΠœΠ°ΠΊΠ³Ρ€ΡΡ‚ΠΎΠΌ. Π’ этих ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° C, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСны, Π½ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ make с Π»ΡŽΠ±Ρ‹ΠΌ языком программирования, Ρ‡Π΅ΠΉ компилятор ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ. На самом Π΄Π΅Π»Π΅, make Π½Π΅ ограничиваСтся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ для описания любой Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒΡΡ автоматичСски ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ…, ΠΊΠΎΠ³Π΄Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ.

Π­Ρ‚Π° страница Π² Ρ‡Π΅ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π°» rel=dofollow»>страница являСтся Π²Ρ‹Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ ΠΈΠ· Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ GNU make . Она обновляСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ GNU Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ nroff. Для ΠΏΠΎΠ»Π½ΠΎΠΉ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΌΡƒ Ρ„Π°ΠΉΠ»Ρƒ make.info, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сдСлан ΠΈΠ· исходного Ρ„Π°ΠΉΠ»Π° Texinfo make.texinfo.

Бинтаксис ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ make

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒΡΡ ΠΊ использованию make, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ makefile, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ описываСт ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ Π² вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΈ содСрТит ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ для обновлСния ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ исполняСмый Ρ„Π°ΠΉΠ» обновляСтся ΠΈΠ· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΏΡƒΡ‚Π΅ΠΌ компиляции исходных Ρ„Π°ΠΉΠ»ΠΎΠ².

Когда сущСствуСт подходящий make-Ρ„Π°ΠΉΠ», ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ мСняСтС Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ исходныС Ρ„Π°ΠΉΠ»Ρ‹, этой простой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ make достаточно для выполнСния всСх Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… пСрСкомпиляций. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° make ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… makefile ΠΈ врСмя послСднСго измСнСния Ρ„Π°ΠΉΠ»ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠ· Ρ„Π°ΠΉΠ»ΠΎΠ² Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ. Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· этих Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΎΠ½ Π²Ρ‹Π΄Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, записанныС Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ….

Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° make обновляСт Ρ†Π΅Π»ΡŒ, Ссли ΠΎΠ½Π° зависит ΠΎΡ‚ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹ с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° послСднСго измСнСния Ρ†Π΅Π»ΠΈ, ΠΈΠ»ΠΈ Ссли Ρ†Π΅Π»ΡŒ Π½Π΅ сущСствуСт.

ΠžΠΏΡ†ΠΈΠΈ

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ -b ΠΈ -m ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ для совмСстимости с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ вСрсиями make.

ΠžΠΏΡ†ΠΈΡ -e Π΄Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, взятыС ΠΈΠ· ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π° срСды Π½Π°Π΄ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ ΠΈΠ· make-Ρ„Π°ΠΉΠ»ΠΎΠ².

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ -f Ρ„Π°ΠΉΠ» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ„Π°ΠΉΠ» Π² качСствС Ρ„Π°ΠΉΠ»Π° сборки.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ -i ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ всС ошибки Π² ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ…, выполняСмых для прСобразования Ρ„Π°ΠΉΠ»ΠΎΠ².

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ -I dir ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ dir для поиска Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Ρ… make-Ρ„Π°ΠΉΠ»ΠΎΠ². Если нСсколько ΠΎΠΏΡ†ΠΈΠΉ -I ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для указания Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ², ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ ищутся Π² ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ порядкС. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„Π»Π°Π³ΠΎΠ² make, ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ с Ρ„Π»Π°Π³Π°ΠΌΠΈ -I ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ нСпосрСдствСнно послС Ρ„Π»Π°Π³Π°: -Idir Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½, Π° Ρ‚Π°ΠΊΠΆΠ΅ -I dir . Π­Ρ‚ΠΎΡ‚ синтаксис Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ для совмСстимости с Ρ„Π»Π°Π³ΠΎΠΌ -I прСпроцСссора C.

ΠžΠΏΡ†ΠΈΡ -k продолТаСтся Π² максимально Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ стСпСни послС ошибки; Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Ρ†Π΅Π»ΡŒ, которая Π²Ρ‹ΡˆΠ»Π° ΠΈΠ· строя, ΠΈ Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ зависят ΠΎΡ‚ Π½Π΅Π΅, Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π΅Π»Π°Π½Ρ‹, Π΄Ρ€ΡƒΠ³ΠΈΠ΅ зависимости этих Ρ†Π΅Π»Π΅ΠΉ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ -l ΠΈ -l load ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ Π½Π΅ слСдуСт Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ задания (ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹), Ссли Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ задания, Π° срСдняя Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° составляСт Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ load (число с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ). Π‘Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² удаляСт ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ Π»ΠΈΠΌΠΈΡ‚ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ.

ΠžΠΏΡ†ΠΈΡ -n ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹, Π½ΠΎ Π½Π΅ выполняСт ΠΈΡ….

ΠžΠΏΡ†ΠΈΡ -p ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… (ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΈ значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…), ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΡƒΡŽ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ чтСния make-Ρ„Π°ΠΉΠ»ΠΎΠ². Π—Π°Ρ‚Π΅ΠΌ ΠΎΠ½ выполняСтся ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Π½ΠΎ ΠΈΠ½Π°Ρ‡Π΅. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ вСрсии, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»Π΅Π½Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»Π΅ΠΌ -v (см. НиТС). Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π΅ ΠΏΡ‹Ρ‚Π°ΡΡΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ Ρ„Π°ΠΉΠ»Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ make -p -f/dev/null .

ΠžΠΏΡ†ΠΈΡ -q Π·Π°Π΄Π°Π΅Ρ‚ Ρ€Π΅ΠΆΠΈΠΌ вопросов. НС выполняйтС Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΏΠ΅Ρ‡Π°Ρ‚Π°ΠΉΡ‚Π΅, просто Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ состояниС Π²Ρ‹Ρ…ΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Ρ€Π°Π²Π½ΠΎ Π½ΡƒΠ»ΡŽ, Ссли ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Ρ†Π΅Π»ΠΈ ΡƒΠΆΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Ρ‹, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС – Π½Π΅Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

ΠžΠΏΡ†ΠΈΡ -r ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ использованиС встроСнных нСявных ΠΏΡ€Π°Π²ΠΈΠ». Π’Π°ΠΊΠΆΠ΅ ΠΎΡ‡ΠΈΡ‰Π°Π΅Ρ‚ список суффиксов ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для ΠΏΡ€Π°Π²ΠΈΠ» суффиксов.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ -s ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ. Π­Ρ‚ΠΎ Π½Π΅ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹.

ΠžΠΏΡ†ΠΈΡ -t касаСтся Ρ„Π°ΠΉΠ»ΠΎΠ² (ΠΏΠΎΠΌΠ΅Ρ‡Π°Π΅Ρ‚ ΠΈΡ… ΠΊΠ°ΠΊ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅, Π±Π΅Π· ΠΈΡ… Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ измСнСния) вмСсто запуска ΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄. Π­Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²ΠΈΠ΄, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π±Ρ‹Π»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΠΌΠ°Π½ΡƒΡ‚ΡŒ Π±ΡƒΠ΄ΡƒΡ‰ΠΈΠ΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ make.

ΠžΠΏΡ†ΠΈΡ -v ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ Π²Π΅Ρ€ΡΠΈΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ make, Π° Ρ‚Π°ΠΊΠΆΠ΅ авторскиС ΠΏΡ€Π°Π²Π°, список Π°Π²Ρ‚ΠΎΡ€ΠΎΠ² ΠΈ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΎΠ± отсутствии Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ -W Ρ„Π°ΠΉΠ» Π΄Π΅Π»Π°Π΅Ρ‚ Π²ΠΈΠ΄, Ρ‡Ρ‚ΠΎ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Ρ„Π°ΠΉΠ» Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ Π±Ρ‹Π» ΠΈΠ·ΠΌΠ΅Π½Π΅Π½. ΠŸΡ€ΠΈ использовании с Ρ„Π»Π°Π³ΠΎΠΌ -n это ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚, Ссли Π²Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅ этот Ρ„Π°ΠΉΠ». Π‘Π΅Π· -n это ΠΏΠΎΡ‡Ρ‚ΠΈ Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ запуск ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ touch для Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° ΠΏΠ΅Ρ€Π΅Π΄ запуском make, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ врСмя ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ измСняСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Π²ΠΎΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ make.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠŸΡ€ΠΎΡΡ‚ΠΎ ΠΎ make

МСня всСгда ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Π» ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΠΈΠ·ΠΌ. ИдСя ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ΄Π½Π° Π²Π΅Ρ‰ΡŒ Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠ΄Π½Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π½ΠΎ ΠΏΡ€ΠΈ этом Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π΅Π΅ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π»ΡƒΡ‡ΡˆΠ΅, Π²Ρ‹Π»ΠΈΠ»Π°ΡΡŒ Π² созданиС UNIX. И хотя UNIX Π΄Π°Π²Π½ΠΎ ΡƒΠΆΠ΅ нСльзя Π½Π°Π·Π²Π°Ρ‚ΡŒ простой систСмой, Π΄Π° ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΠΈΠ·ΠΌ Π² Π½Π΅ΠΉ ΡƒΠ·Ρ€Π΅Ρ‚ΡŒ Π½Π΅ Ρ‚Π°ΠΊ Ρ‚ΠΎ просто, Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ наглядным ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ количСство- качСствСнной трансформации мноТСства простых ΠΈ понятных Π²Π΅Ρ‰Π΅ΠΉ Π² ΠΎΠ΄Π½Ρƒ вСсьма Π½Π΅ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ ΠΈ Π½Π΅ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΡƒΡŽ. Π’ своСм Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠΈ make ΠΏΡ€ΠΎΡˆΠ΅Π» ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ ΠΏΡƒΡ‚ΡŒ: простота ΠΈ ΡΡΠ½ΠΎΡΡ‚ΡŒ, с ростом ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΎΠ², ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΠ»Π°ΡΡŒ Π² ΠΆΡƒΡ‚ΠΊΠΎΠ³ΠΎ монстра (вспомнитС свои ощущСния, ΠΊΠΎΠ³Π΄Π° Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Π»ΠΈ мэйкфайл).

МоС ΡƒΠΏΠΎΡ€Π½ΠΎΠ΅ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ make Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠΈ Π΄ΠΎΠ»Π³ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π±Ρ‹Π»ΠΎ обусловлСно удобством ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… IDE, ΠΈ Π½Π΅ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ΠΌ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ Π² этом ‘ΠΏΠ΅Ρ€Π΅ΠΆΠΈΡ‚ΠΊΠ΅ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠ³ΠΎ’ (ΠΏΠΎ сути β€” лСнью). Однако, всС эти Π½Π°Π΄ΠΎΠ΅Π΄Π»ΠΈΠ²Ρ‹Π΅ ΠΊΠ½ΠΎΠΏΠΎΡ‡ΠΊΠΈ, мСнюшки ΠΈΡ‚.ΠΏ. Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ всСвозмоТных студий, заставили мСня ΠΈΡΠΊΠ°Ρ‚ΡŒ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρƒ Ρ‚ΠΎΠΌΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Ρ€Π°Π±ΠΎΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ я ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠ²Π°Π» Π΄ΠΎ сих ΠΏΠΎΡ€. НСт, я Π½Π΅ стал Π³ΡƒΡ€Ρƒ make, Π½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… мною Π·Π½Π°Π½ΠΈΠΉ Π²ΠΏΠΎΠ»Π½Π΅ достаточно для ΠΌΠΎΠΈΡ… Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ². Данная ΡΡ‚Π°Ρ‚ΡŒΡ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ я Π΅Ρ‰Π΅ совсСм Π½Π΅Π΄Π°Π²Π½ΠΎ, ΠΆΠ΅Π»Π°ΡŽΡ‚ Π²Ρ‹Ρ€Π²Π°Ρ‚ΡŒΡΡ ΠΈΠ· ΡƒΡŽΡ‚Π½ΠΎΠ³ΠΎ ΠΎΠΊΠΎΠ½Π½ΠΎΠ³ΠΎ рабства Π² аскСтичный, Π½ΠΎ свободный ΠΌΠΈΡ€ шСлла.

Make- основныС свСдСния

make β€” ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° прСдназначСнная для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ прСобразования Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡ‹ Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ. ΠŸΡ€Π°Π²ΠΈΠ»Π° прСобразования Π·Π°Π΄Π°ΡŽΡ‚ΡΡ Π² скриптС с ΠΈΠΌΠ΅Π½Π΅ΠΌ Makefile, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² ΠΊΠΎΡ€Π½Π΅ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π‘Π°ΠΌ скрипт состоит ΠΈΠ· Π½Π°Π±ΠΎΡ€Π° ΠΏΡ€Π°Π²ΠΈΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ:

1) цСлями (Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½ΠΎΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚);
2) Ρ€Π΅ΠΊΠ²ΠΈΠ·ΠΈΡ‚Π°ΠΌΠΈ (Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для выполнСния ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΈ получСния Ρ†Π΅Π»Π΅ΠΉ);
3) ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ (Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΌΠΈ Π΄Π°Π½Π½Ρ‹Π΅ прСобразования).

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ Π²ΠΈΠ΄Π΅ синтаксис makefile ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊ:

Π’ΠΎ Π΅ΡΡ‚ΡŒ, ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ make это ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ Π½Π° Ρ‚Ρ€ΠΈ вопроса:

НСслоТно Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Ρ‡Ρ‚ΠΎ процСссы трансляции ΠΈ компиляции ΠΎΡ‡Π΅Π½ΡŒ красиво лоТатся Π½Π° эту схСму:

ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ Makefile

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρƒ нас имССтся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, состоящая всСго ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°:

Для Π΅Π³ΠΎ компиляции достаточно ΠΎΡ‡Π΅Π½ΡŒ простого мэйкфайла:

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ ΠΈΠ· мноТСства исходников

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ нас имССтся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, состоящая ΠΈΠ· 2 Ρ„Π°ΠΉΠ»ΠΎΠ²:
main.c

Makefile, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

Он Π²ΠΏΠΎΠ»Π½Π΅ работоспособСн, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ нСдостаток: ΠΊΠ°ΠΊΠΎΠΉ β€” раскроСм Π΄Π°Π»Π΅Π΅.

Π˜Π½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π½Π°Ρ компиляция

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΠΌ, Ρ‡Ρ‚ΠΎ наша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° состоит ΠΈΠ· дСсятка- Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ исходных Ρ„Π°ΠΉΠ»ΠΎΠ². ΠœΡ‹ вносим измСнСния Π² ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ…, ΠΈ Ρ…ΠΎΡ‚ΠΈΠΌ Π΅Π΅ ΠΏΠ΅Ρ€Π΅ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ. ИспользованиС ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° описанного Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ всС Π±Π΅Π· ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ исходныС Ρ„Π°ΠΉΠ»Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ снова скомпилированы, Ρ‡Ρ‚ΠΎ Π½Π΅Π³Π°Ρ‚ΠΈΠ²Π½ΠΎ скаТСтся Π½Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ пСрСкомпиляции. РСшСниС β€” Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ Π½Π° Π΄Π²Π° этапа: этап трансляции ΠΈ этап Π»ΠΈΠ½ΠΊΠΎΠ²ΠΊΠΈ.

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

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ этот ΠΏΡ€ΠΎΠ΅ΠΊΡ‚. Для Π΅Π³ΠΎ сборки Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ явно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ†Π΅Π»ΡŒ, Ρ‚.Π΅. Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ make hello.
ПослС- ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅ любой ΠΈΠ· исходных Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ собСритС Π΅Π³ΠΎ снова. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²ΠΎ врСмя Π²Ρ‚ΠΎΡ€ΠΎΠΉ компиляции, Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ».

ПослС запуска make попытаСтся сразу ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ†Π΅Π»ΡŒ hello, Π½ΠΎ для Π΅Π΅ создания Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ Ρ„Π°ΠΉΠ»Ρ‹ main.o ΠΈ hello.o, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΠΊΠ° Π΅Ρ‰Π΅ Π½Π΅Ρ‚. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½ΠΎ ΠΈ make станСт ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»Π°, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π½Π΅Π΄ΠΎΡΡ‚Π°ΡŽΡ‰ΠΈΡ… Ρ€Π΅ΠΊΠ²ΠΈΠ·ΠΈΡ‚ΠΎΠ². Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ всС Ρ€Π΅ΠΊΠ²ΠΈΠ·ΠΈΡ‚Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Ρ‹, make вСрнСтся ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ Ρ†Π΅Π»ΠΈ. ΠžΡ‚ΡΡŽΠ΄Π° слСдуСт, Ρ‡Ρ‚ΠΎ make выполняСт ΠΏΡ€Π°Π²ΠΈΠ»Π° рСкурсивно.

Π€ΠΈΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ Ρ†Π΅Π»ΠΈ

На самом Π΄Π΅Π»Π΅, Π² качСствС make Ρ†Π΅Π»Π΅ΠΉ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹. ВсС, ΠΊΠΎΠΌΡƒ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠ· исходных ΠΊΠΎΠ΄ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с двумя стандартными Π² ΠΌΠΈΡ€Π΅ UNIX ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ:

Командой make производят ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ make install β€” установку. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ вСсьма ΡƒΠ΄ΠΎΠ±Π΅Π½, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ для сборки ΠΈ развСртывания прилоТСния Π² Ρ†Π΅Π»Π΅Π²ΠΎΠΉ систСмС Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ Π² ΠΎΠ΄ΠΈΠ½ Ρ„Π°ΠΉΠ» (Π·Π°Π±ΡƒΠ΄Π΅ΠΌ Π½Π° врСмя ΠΎ скриптС configure). ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ случаС ΠΌΡ‹ Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ Ρ†Π΅Π»ΡŒ, Π° Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ Ρ†Π΅Π»ΡŒΡŽ являСтся вовсС Π½Π΅ созданиС Ρ„Π°ΠΉΠ»Π° install, Π° процСсс установки прилоТСния Π² систСму. ΠŸΡ€ΠΎΠ΄Π΅Π»Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ фокусы Π½Π°ΠΌ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ Ρ„ΠΈΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ (phony) Ρ†Π΅Π»ΠΈ. Π’ΠΎΡ‚ ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΉ список стандартных Ρ†Π΅Π»Π΅ΠΉ:

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

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π² Ρ†Π΅Π»ΠΈ all Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹; всС Ρ‡Ρ‚ΠΎ Π΅ΠΉ Π½ΡƒΠΆΠ½ΠΎ β€” ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π΅ΠΊΠ²ΠΈΠ·ΠΈΡ‚ hello. Зная ΠΎ рСкурсивной ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π΅ make, Π½Π΅ слоТно ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ этот скрипт. Π’Π°ΠΊ ΠΆΠ΅ слСдуСт ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ особоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ссли Ρ„Π°ΠΉΠ» hello ΡƒΠΆΠ΅ имССтся (остался послС ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ компиляции) ΠΈ Π΅Π³ΠΎ Ρ€Π΅ΠΊΠ²ΠΈΠ·ΠΈΡ‚Ρ‹ Π½Π΅ Π±Ρ‹Π»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹, Ρ‚ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π° make Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ станСт ΠΏΠ΅Ρ€Π΅ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ. Π­Ρ‚ΠΎ классичСскиС Π³Ρ€Π°Π±Π»ΠΈ make. Π’Π°ΠΊ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», случайно Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΉ Π² список Ρ€Π΅ΠΊΠ²ΠΈΠ·ΠΈΡ‚ΠΎΠ², ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄ΠΎΠ»Π³ΠΈΠ΅ часы Π³ΠΎΠ»ΠΎΠ²Π½ΠΎΠΉ Π±ΠΎΠ»ΠΈ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠ΅Ρ€Π΅ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³:

Для выполнСния Ρ†Π΅Π»Π΅ΠΉ install/uninstall Π²Π°ΠΌ ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ sudo.

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅

ВсС Ρ‚Π΅, ΠΊΡ‚ΠΎ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с ΠΏΡ€Π°Π²ΠΈΠ»ΠΎΠΌ DRY (Don’t repeat yourself), навСрняка ΡƒΠΆΠ΅ Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ Π½Π΅Π»Π°Π΄Π½ΠΎΠ΅, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ β€” наш Makefile содСрТит большоС число ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΡ…ΡΡ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠ², Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Π΅ ΠΏΡ€ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ°Ρ… Π΅Π³ΠΎ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ. Π’ ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… языках для этих Ρ†Π΅Π»Π΅ΠΉ Ρƒ нас ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ константы; make Ρ‚ΠΎΠΆΠ΅ располагаСт ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌΠΈ срСдствами. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² make ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ строки ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΎΡ‡Π΅Π½ΡŒ просто:

БущСствуСт нСгласноС ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, согласно ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ слСдуСт ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ рСгистрС, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

НиТС прСдставлСн мэйкфайл, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ Π΄Π²Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅: TARGET β€” для опрСдСлСния ΠΈΠΌΠ΅Π½ΠΈ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ PREFIX β€” для опрСдСлСния ΠΏΡƒΡ‚ΠΈ установки ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² систСму.

Π­Ρ‚ΠΎ ΡƒΠΆΠ΅ посимпатичнСй. Π”ΡƒΠΌΠ°ΡŽ, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ΡˆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ для вас Π² особых коммСнтариях Π½Π΅ нуТдаСтся.

АвтоматичСскиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅

АвтоматичСскиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для упрощСния ΠΌΠ΅ΠΉΠΊΡ„Π°ΠΉΠ»ΠΎΠ², Π½ΠΎ Π½Π° ΠΌΠΎΠΉ взгляд Π½Π΅Π³Π°Ρ‚ΠΈΠ²Π½ΠΎ ΡΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π½Π° ΠΈΡ… Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Как Π±Ρ‹ Ρ‚ΠΎ Π½ΠΈ Π±Ρ‹Π»ΠΎ, я ΠΏΡ€ΠΈΠ²Π΅Π΄Ρƒ здСсь нСсколько Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Π° Ρ‡Ρ‚ΠΎ с Π½ΠΈΠΌΠΈ Π΄Π΅Π»Π°Ρ‚ΡŒ (ΠΈ Π΄Π΅Π»Π°Ρ‚ΡŒ Π»ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅) Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ Π²Π°ΠΌ:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *