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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠžΡΠ½ΠΎΠ²Ρ‹ программирования Π² LinuxΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 102

Автор НСйл ΠœΡΡ‚ΡŒΡŽ

Π“ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Π°Ρ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΏΡ€ΠΈ создании многочислСнных Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ ΠΈΡ… Π² Ρ€Π°Π·Π½Ρ‹Π΅ исходныС Ρ„Π°ΠΉΠ»Ρ‹. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ вас Π΅ΡΡ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ a.h, b.h ΠΈ c.h ΠΈ исходныС Ρ„Π°ΠΉΠ»Ρ‹ Π½Π° языкС Π‘ main.c, 2.с ΠΈ 3.c (ΠΌΡ‹ надССмся, Ρ‡Ρ‚ΠΎ Π² Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… Π²Ρ‹ Π²Ρ‹Π±Π΅Ρ€Π΅Ρ‚Π΅ Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄Π°Ρ‡Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π°, Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ здСсь). Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒΡΡ со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ситуациСй.

/* main.c */

#include "a.h"

...

/* 2.с */

#include "a.h"

#include "b.h"

...

/* 3.c */

#include "b.h"

#include "c.h"

...

Если программист измСняСт Ρ„Π°ΠΉΠ» c.h, Ρ„Π°ΠΉΠ»Ρ‹ main.c ΠΈ 2.с Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ Π½Π΅ зависят ΠΎΡ‚ этого Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°. Π€Π°ΠΉΠ» 3.с зависит ΠΎΡ‚ c.h ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ Π·Π°Π½ΠΎΠ²ΠΎ, Ссли измСнился c.h. Но Ссли Π±Ρ‹Π» ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ Ρ„Π°ΠΉΠ» b.h, ΠΈ программист Π·Π°Π±Ρ‹Π» ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°Π½ΠΎΠ²ΠΎ Ρ„Π°ΠΉΠ» 2.с, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΡΡ‚Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ.

Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° make ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΎΠ±Π΅ эти ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, обСспСчивая Π² случаС нСобходимости ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ всСх Ρ„Π°ΠΉΠ»ΠΎΠ², Π·Π°Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚Ρ‹Ρ… измСнСниями.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

Команда make примСняСтся Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для компиляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Π•Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ². Π•Ρ‰Ρ‘ ΠΎΠ΄Π½ΠΎ Π΅Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² (Ρ‚Π°ΠΊΡƒΡŽ ΠΆΠ΅, ΠΊΠ°ΠΊ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ troff ΠΈΠ»ΠΈ Π’Π΅Π₯).

Команда make ΠΈ make-Ρ„Π°ΠΉΠ»Ρ‹

НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρƒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ make ΠΌΠ½ΠΎΠ³ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… свСдСний ΠΈ Π·Π½Π°Π½ΠΈΠΉ, ΠΎΠ½Π° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Π°Ρ‚ΡŒ вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сообщит Π΅ΠΉ, ΠΊΠ°ΠΊ устроСно ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π­Ρ‚ΠΎΡ‚ Ρ„Π°ΠΉΠ» называСтся make-Ρ„Π°ΠΉΠ»ΠΎΠΌ ΠΈΠ»ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠΌ сборки.

Make-Ρ„Π°ΠΉΠ» Ρ‡Π°Ρ‰Π΅ всСго располоТСн Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, Ρ‡Ρ‚ΠΎ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ исходныС Ρ„Π°ΠΉΠ»Ρ‹ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π’ любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° вашСм ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ мноТСство make-Ρ„Π°ΠΉΠ»ΠΎΠ². Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Ссли Ρƒ вас большой ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΈΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ make-Ρ„Π°ΠΉΠ»Ρ‹ для Ρ€Π°Π·Π½Ρ‹Ρ… частСй ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

Π‘ΠΎΡ‡Π΅Ρ‚Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ make ΠΈ make-Ρ„Π°ΠΉΠ»Π° β€” ΠΌΠΎΡ‰Π½ΠΎΠ΅ срСдство управлСния ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌΠΈ. Оно часто примСняСтся Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для управлСния компиляциСй исходного ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Π½ΠΎ ΠΈ для ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ справочного руководства ΠΈΠ»ΠΈ установки прилоТСния Π² Π½ΡƒΠΆΠ½Ρ‹ΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³.

Бинтаксис make-Ρ„Π°ΠΉΠ»ΠΎΠ²

Make-Ρ„Π°ΠΉΠ» состоит ΠΈΠ· Π½Π°Π±ΠΎΡ€Π° зависимостСй ΠΈ ΠΏΡ€Π°Π²ΠΈΠ». Π£ зависимости Π΅ΡΡ‚ΡŒ Ρ†Π΅Π»ΡŒ ΠΈΠ»ΠΈ Π·Π°Π΄Π°Π½ΠΈΠ΅ (Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ) ΠΈ Π½Π°Π±ΠΎΡ€ исходных Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ½Π° зависит. ΠŸΡ€Π°Π²ΠΈΠ»Π° ΠΈΠ»ΠΈ инструкции ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ Ρ„Π°ΠΉΠ» ΠΈΠ· зависимых Ρ„Π°ΠΉΠ»ΠΎΠ². ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Ρ†Π΅Π»ΡŒ β€” это Π΅Π΄ΠΈΠ½Ρ‹ΠΉ исполняСмый Ρ„Π°ΠΉΠ».

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

ΠžΠΏΡ†ΠΈΠΈ ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ make

Π£ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ make Π΅ΡΡ‚ΡŒ нСсколько ΠΎΠΏΡ†ΠΈΠΉ. НаиболСС часто ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅:

β–‘ -k, ΡΠΎΠΎΠ±Ρ‰Π°ΡŽΡ‰Π°Ρ make ΠΎ нСобходимости ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, Ссли ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π° ошибка, Π° Π½Π΅ ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ появлСнии ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Π­Ρ‚Ρƒ ΠΎΠΏΡ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для выявлСния Π·Π° ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ всСх исходных Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹;

β–‘ -n, ΡΠΎΠΎΠ±Ρ‰Π°ΡŽΡ‰Π°Ρ make ΠΎ нСобходимости Π²Ρ‹Π²ΠΎΠ΄Π° пСрСчня Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Ρ… дСйствий Π±Π΅Π· Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΈΡ… выполнСния;

β–‘ -f <Ρ„Π°ΠΉΠ»>, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ make ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΎΠΉ Ρ„Π°ΠΉΠ» ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊΠ°ΠΊ make-Ρ„Π°ΠΉΠ». Если Π²Ρ‹ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ эту ΠΎΠΏΡ†ΠΈΡŽ, стандартная вСрсия ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ make ΠΈΡ‰Π΅Ρ‚ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ„Π°ΠΉΠ», Π½Π°Π·Π²Π°Π½Π½Ρ‹ΠΉ makefile. Если Π΅Π³ΠΎ Π½Π΅Ρ‚, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΡ‰Π΅Ρ‚ Ρ„Π°ΠΉΠ», Π½Π°Π·Π²Π°Π½Π½Ρ‹ΠΉ Makefile. Но Ссли Π²Ρ‹ примСняСтС GNU Make, Ρ‡Ρ‚ΠΎ вСроятно Π² ОБ Linux, эта вСрсия ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ make сначала ΠΈΡ‰Π΅Ρ‚ Ρ„Π°ΠΉΠ» GNUmakefile Π΄ΠΎ поиска Ρ„Π°ΠΉΠ»Π° makefile ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ поиска Makefile. Π’ соотвСтствии с соглашСниСм программисты Linux ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ имя Makefile, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ позволяСт ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» сборки ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π² спискС Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°, Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ², состоящими ΠΈΠ· строчных Π±ΡƒΠΊΠ². ΠœΡ‹ ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ имя GNUmakefile, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΎ спСцифично для. Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ GNU ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ make.

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ make Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ΅ Π·Π°Π΄Π°Π½ΠΈΠ΅, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ исполняСмый Ρ„Π°ΠΉΠ», Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ make имя задания ΠΈΠ»ΠΈ Ρ†Π΅Π»ΠΈ ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€. Если этого Π½Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° make попытаСтся Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ Π·Π°Π΄Π°Π½ΠΈΠ΅, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π² make-Ρ„Π°ΠΉΠ»Π΅. МногиС программисты ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π² своих make-Ρ„Π°ΠΉΠ»Π°Ρ… Π² качСствС ΠΏΠ΅Ρ€Π²ΠΎΠΉ Ρ†Π΅Π»ΠΈ ΠΈΠ»ΠΈ задания all ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ задания, ΠΊΠ°ΠΊ зависимости для all. Π­Ρ‚ΠΎ соглашСниС Π΄Π΅Π»Π°Π΅Ρ‚ понятным Π²Ρ‹Π±ΠΎΡ€ задания ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ссли Π½Π΅ Π·Π°Π΄Π°Π½Π° конкрСтная Ρ†Π΅Π»ΡŒ. ΠœΡ‹ ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ этого соглашСния.

Зависимости

Зависимости ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚, ΠΊΠ°ΠΊ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π² ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ связан исходными Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ. Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Ρ€Π°Π½Π΅Π΅ Π² этой Π³Π»Π°Π²Π΅, Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ зависимости, говорящиС ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Π°ΡˆΠ΅ΠΌΡƒ ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ (ΠΎΠ½ΠΎ зависит ΠΎΡ‚) main.ΠΎ, 2.ΠΎ ΠΈ 3.o; ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ для main.ΠΎ (main.c ΠΈ a.h); 2.o (2.с, a.h ΠΈ b.h) ΠΈ 3.o (3.c, b.h ΠΈ c.h). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π½Π° Ρ„Π°ΠΉΠ» main.ΠΎ Π²Π»ΠΈΡΡŽΡ‚ измСнСния Ρ„Π°ΠΉΠ»ΠΎΠ² main.c ΠΈ a.h, ΠΈ ΠΎΠ½ нуТдаСтся Π² пСрСсоздании с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΉ компиляции Ρ„Π°ΠΉΠ»Π° main.c, Ссли Π±Ρ‹Π» ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ любой ΠΈΠ· Π΄Π²ΡƒΡ… ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ².

Π’ make-Ρ„Π°ΠΉΠ» Π²Ρ‹ записываСтС эти ΠΏΡ€Π°Π²ΠΈΠ»Π°, указывая имя задания, Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅, ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ ΠΈΠ»ΠΈ табуляции ΠΈ Π·Π°Ρ‚Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ ΠΈΠ»ΠΈ табуляциями ΠΏΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ Ρ„Π°ΠΉΠ»ΠΎΠ², примСняСмых для создания Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° задания. Π”Π°Π»Π΅Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ список зависимостСй для Ρ€Π°Π½Π΅Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°:

myapp: main:ΠΎ 2.ΠΎ 3.o

main.ΠΎ: main.c a.h

2.о: 2.с a.h b.h

3.o: 3.c b.h c.h

Бписок ΡΠ²ΠΈΠ΄Π΅Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΡƒΠ΅Ρ‚ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ myapp зависит ΠΎΡ‚ main.ΠΎ, 2.o ΠΈ 3.o, a main.o зависит ΠΎΡ‚ main.c ΠΈ a.h ΠΈ Ρ‚. Π΄.

Π”Π°Π½Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ зависимостСй Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡŽ, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ, ΠΊΠ°ΠΊ исходныС Ρ„Π°ΠΉΠ»Ρ‹ связаны Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ. Π’Ρ‹ Π»Π΅Π³ΠΊΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ссли измСняСтся b.h, Ρ‚ΠΎ придСтся ΠΏΠ΅Ρ€Π΅ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ 2.o ΠΈ 3.o, Π° ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ 2.o ΠΈ 3.o Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹, Π²Π°ΠΌ придСтся ΠΏΠ΅Ρ€Π΅ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΈ myapp.

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ нСсколько Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΠΈΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ Ρ†Π΅Π»ΡŒ ΠΈΠ»ΠΈ Π·Π°Π΄Π°Π½ΠΈΠ΅ all. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ состоит ΠΈΠ· Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° myapp ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ руководства myapp.1. ΠžΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ строкой:

all: myapp myapp.1

И Π΅Ρ‰Π΅ Ρ€Π°Π·, Ссли Π²Ρ‹ Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Π·Π°Π΄Π°Π½ΠΈΠ΅ all, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° make просто создаст Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ Ρ„Π°ΠΉΠ», ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹ΠΉ Π² make-Ρ„Π°ΠΉΠ»Π΅.

ΠŸΡ€Π°Π²ΠΈΠ»Π°

Π’Ρ‚ΠΎΡ€ΠΎΠΉ, ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ make-Ρ„Π°ΠΉΠ»Π° β€” ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΈΠ»ΠΈ инструкции, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ способ создания Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° задания. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π° ΠΊΠ°ΠΊΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ слСдуСт ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠ°Π½Π΄Π° make ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»Π°, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ» 2.o нуТдаСтся Π² пСрСстройкС? Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, достаточно простого примСнСния ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ gcc -с 2.с (ΠΈ ΠΊΠ°ΠΊ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Π² дальнСйшСм, make Π½Π° самом Π΄Π΅Π»Π΅ Π·Π½Π°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ стандартных ΠΏΡ€Π°Π²ΠΈΠ»), Π½ΠΎ Ρ‡Ρ‚ΠΎ Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ include ΠΈΠ»ΠΈ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΎΠΏΡ†ΠΈΡŽ Π²Ρ‹Π²ΠΎΠ΄Π° символьной ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ? Π‘Π΄Π΅Π»Π°Ρ‚ΡŒ это ΠΌΠΎΠΆΠ½ΠΎ, явно ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ² ΠΏΡ€Π°Π²ΠΈΠ»Π° Π² make-Ρ„Π°ΠΉΠ»Π΅.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

Π’ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ вас ΠΎΠ± ΠΎΡ‡Π΅Π½ΡŒ странной ΠΈ Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎΠΉ синтаксичСской записи, примСняСмой Π² make-Ρ„Π°ΠΉΠ»Π°Ρ…: Ρ€Π°Π·Π½ΠΈΡ†Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠΌ ΠΈ табуляциСй. ВсС ΠΏΡ€Π°Π²ΠΈΠ»Π° Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ собой строки, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ΡΡ со Π·Π½Π°ΠΊΠ° табуляции; ΠΏΡ€ΠΎΠ±Π΅Π» Π½Π΅ годится. Π’Π°ΠΊ ΠΊΠ°ΠΊ нСсколько ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ² ΠΈ табуляция выглядят ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ ΠΈ ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΠΎΡ‡Ρ‚ΠΈ Π²ΠΎ всСх Π΄Ρ€ΡƒΠ³ΠΈΡ… случаях, ΠΊΠ°ΡΠ°ΡŽΡ‰ΠΈΡ…ΡΡ программирования Π² систСмС Linux, Π½Π΅Ρ‚ большой Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ ΠΈ табуляциями, это ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΏΡ€ΠΎΠ±Π΅Π» Π² ΠΊΠΎΠ½Ρ†Π΅ строки Π² make-Ρ„Π°ΠΉΠ»Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ сбой ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ make. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, это историчСский Ρ„Π°ΠΊΡ‚ ΠΈ Π² нашС врСмя слишком ΠΌΠ½ΠΎΠ³ΠΎ make-Ρ„Π°ΠΉΠ»ΠΎΠ² находится Π² ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Ρ€Π°ΡΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ полоТСния Π²Π΅Ρ‰Π΅ΠΉ, поэтому Π±ΡƒΠ΄ΡŒΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹! К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, Ссли ΠΊΠΎΠΌΠ°Π½Π΄Π° make Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈΠ·-Π·Π° ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠΉ табуляции, это ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ довольно понятно.

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 9.1.

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 9.1. ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ make-Ρ„Π°ΠΉΠ»

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΡ€Π°Π²ΠΈΠ» ΠΈΠ»ΠΈ инструкций состоит ΠΈΠ· простой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, которая ΠΌΠΎΠ³Π»Π° Π±Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π½Π°Π±Ρ€Π°Π½Π° Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС. Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° создайтС свой ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ make-Ρ„Π°ΠΉΠ» Makefile1:

myapp: main.ΠΎ 2.o 3.o

 gcc -ΠΎ myapp main.ΠΎ 2.o 3.o


main.ΠΎ: main.c a.h

 gcc -с main.c


2.о: 2.с a.h b.h

 gcc -с 2.с