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

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

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

a - 2.o

gcc -g -Wall -ansi -с -о 3.o 3.c

ar rv mylib.a 3.o

a - 3.ΠΎ

gcc -o myapp main.ΠΎ mylib.a

$ <b>touch c.h</b>

$ <b>make -f Makefile5</b>

gcc -g -Wall -ansi -с -о 3.o 3.c

ar rv mylib.a 3.o

r - 3.ΠΎ

gcc -o myapp main.ΠΎ mylib.a

$

Как это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

Π‘Π½Π°Ρ‡Π°Π»Π° Π²Ρ‹ удаляСтС всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π΅

make
ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» myapp, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚, ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π² ΠΈ создав Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» main.ΠΎ с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ для создания исполняСмого Ρ„Π°ΠΉΠ»Π° myapp. Π”Π°Π»Π΅Π΅ Π²Ρ‹ тСстируСтС Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ для Ρ„Π°ΠΉΠ»Π° 3.o, которая ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ
make
ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ, Ссли мСняСтся Ρ„Π°ΠΉΠ» c.h, Ρ„Π°ΠΉΠ» 3.c слСдуСт Π·Π°Π½ΠΎΠ²ΠΎ ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Она Π΄Π΅Π»Π°Π΅Ρ‚ это ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ, ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π² Ρ„Π°ΠΉΠ» ΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΠ² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΎΠΉ, ΡΠΎΠ·Π΄Π°ΡŽΡ‰Π΅ΠΉ Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ исполняСмого Ρ„Π°ΠΉΠ»Π° myapp.

Π‘ΠΎΠ»Π΅Π΅ слоТная Ρ‚Π΅ΠΌΠ°: make-Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ Π½Π°Π΄ большими ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΠΏΠΎΡ€ΠΎΠΉ Π±Ρ‹Π²Π°Π΅Ρ‚ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΎΡ‚Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΎΡ‚ основных Ρ„Π°ΠΉΠ»ΠΎΠ² Ρ„Π°ΠΉΠ»Ρ‹, Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, ΠΈ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΈΡ… Π² ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹

make
ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это двумя способами.

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

mylib.a:

Β (cd mylibdirectory;$(MAKE))

Π­Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ гласит, Ρ‡Ρ‚ΠΎ Π²Ρ‹ всСгда Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ mylib.a с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹

make
. Когда
make
ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ создания Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΎΠ½Π° измСняСт ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Π½Π° mylibdirectory ΠΈ Π·Π°Ρ‚Π΅ΠΌ запускаСт Π½ΠΎΠ²ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ
make
для управлСния Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ для этого запускаСтся новая командная ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ°, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‰Π°Ρ make-Ρ„Π°ΠΉΠ», Π½Π΅ выполняСт ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ
cd
. А командная ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ°, запущСнная для выполнСния ΠΏΡ€Π°Π²ΠΈΠ»Π° построСния Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, находится Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅. Π‘ΠΊΠΎΠ±ΠΊΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ всСго процСсса Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅.

Π’Ρ‚ΠΎΡ€ΠΎΠΉ способ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… макросов Π² ΠΎΠ΄Π½ΠΎΠΌ make-Ρ„Π°ΠΉΠ»Π΅. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ макросы Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ символа

D
для ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° ΠΈΠ»ΠΈ символа
F
для ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π° ΠΊ Ρ‚Π΅ΠΌ макросам, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ ΡƒΠΆΠ΅ обсуТдали. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ встроСнноС ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ с суффиксами .с.ΠΎ

.c.o:

 $(ББ) $(CFLAGS) -с $(@D)/$(&lt;F) -о $(@D)/$(@F)

для компиляции Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ ΠΈ сохранСния Π² Π½Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ². Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ обновляСтС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ зависимости ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π°, Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π΄Π°Π»Π΅Π΅:

mylib.a: mydir/2.o mydir/3.ΠΎ

Β ar -rv mylib.a $?

Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ· способов ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅Π΅ Π² вашСм ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅. МногиС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ просто ΠΈΠ·Π±Π΅Π³Π°ΡŽΡ‚ примСнСния ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ², Π½ΠΎ это ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π½Π΅ΠΏΠΎΠΌΠ΅Ρ€Π½ΠΎΠΌΡƒ Ρ€Π°Π·Ρ€Π°ΡΡ‚Π°Π½ΠΈΡŽ исходного ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°. Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ³ΠΎ ΠΎΠ±Π·ΠΎΡ€Π°, ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ

make
ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°ΠΌΠΈ ΠΈ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ возрастаСт ΠΏΡ€ΠΈ этом лишь Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ.

ВСрсия GNU ΠΊΠΎΠΌΠ°Π½Π΄ make ΠΈ gcc

Для GNU-ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹

make
ΠΈ GNU-компилятора
gcc
ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Π²Π΅ интСрСсныС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠΏΡ†ΠΈΠΈ.

β–‘Β ΠŸΠ΅Ρ€Π²Π°Ρ β€” опция

-j<i>N</i>
("jobs") ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹
make
. Она позволяСт
make
Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ
<i>N</i>
ΠΊΠΎΠΌΠ°Π½Π΄ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. Π’Π°ΠΌ, Π³Π΄Π΅ нСсколько Ρ€Π°Π·Π½Ρ‹Ρ… частСй ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΌΠΎΠ³ΡƒΡ‚ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ нСзависимо, ΠΊΠΎΠΌΠ°Π½Π΄Π°
make
запускаСт нСсколько ΠΏΡ€Π°Π²ΠΈΠ» Π² ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ врСмя. Π’ зависимости ΠΎΡ‚ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ вашСй систСмы эта Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ сущСствСнно ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ врСмя, Π·Π°Ρ‚Ρ€Π°Ρ‡Π΅Π½Π½ΠΎΠ΅ Π½Π° ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ. Если Ρƒ вас ΠΌΠ½ΠΎΠ³ΠΎ исходных Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ стоит Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ этой ΠΎΠΏΡ†ΠΈΠ΅ΠΉ. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, нСбольшиС числа, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€
-j3
, β€” Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ отправная Ρ‚ΠΎΡ‡ΠΊΠ°. Если Π²Ρ‹ Π΄Π΅Π»ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ, примСняйтС эту ΠΎΠΏΡ†ΠΈΡŽ с ΠΎΡΡ‚ΠΎΡ€ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ. Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅ ΠΎΠ΄ΠΎΠ±Ρ€ΠΈΡ‚ΡŒ запуск большого количСства процСссов ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ вашСй компиляции!

β–‘ Π’Ρ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ β€” опция

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

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 9.5.

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 9.5. ИспользованиС
gcc -MM

Π’ этом ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠΈ Π²Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΎΠΏΡ†ΠΈΡŽ

-MM
Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅
gcc
для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ списка зависимостСй вашСго ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°:

$ <b>gcc -MM main.с 2.с 3.с</b>

main.ΠΎ: main.c a.h

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

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

$

Как это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€

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

Если Π²Ρ‹ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с make-Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ срСдство

makedepend
, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ выполняСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΡƒΡŽ ΠΎΠΏΡ†ΠΈΠΈ
-MM
, Π½ΠΎ вставляСт ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ список зависимостСй Π² ΠΊΠΎΠ½Π΅Ρ† Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π²Π°ΠΌΠΈ make-Ρ„Π°ΠΉΠ»Π°.

ΠŸΠ΅Ρ€Π΅Π΄ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ΠΌ Ρ‚Π΅ΠΌΡ‹ make-Ρ„Π°ΠΉΠ»ΠΎΠ², Π±Ρ‹Ρ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚, стоит ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠ½ΡƒΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π΅ слСдуСт ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ make-Ρ„Π°ΠΉΠ»ΠΎΠ² Ρ‚ΠΎΠ»ΡŒΠΊΠΎ компиляциСй ΠΊΠΎΠ΄Π° ΠΈ созданиСм Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. Π˜Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ любой Π·Π°Π΄Π°Ρ‡ΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π΅ΡΡ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄, Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… ΠΈΠ· Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ Ρ„Π°ΠΉΠ». Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΌ "нСкомпиляционным" ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ

awk
, ΠΈΠ»ΠΈ
sed
для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ»ΠΈ гСнСрация ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ справочного руководства. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ практичСски Π»ΡŽΠ±ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Ρ„Π°ΠΉΠ»ΠΎΠ², Ссли Π½Π° основании ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Π΄Π°Ρ‚Π΅ ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Ρ„Π°ΠΉΠ»Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠ· Ρ„Π°ΠΉΠ»ΠΎΠ² Π±Ρ‹Π»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹.