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.Ρ
3.o: 3.c b.h c.h
gcc -Ρ 3.c
ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ make Ρ ΠΎΠΏΡΠΈΠ΅ΠΉ -f, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π²Π°Ρ make-ΡΠ°ΠΉΠ» Π½Π΅ Π½Π°Π·Π²Π°Π½ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ ΠΈΠΌΠ΅Π½ makefile ΠΈΠ»ΠΈ Makefile. ΠΡΠ»ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ ΠΊΠΎΠ΄ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅, Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅ΠΌ ΠΈΡΡ ΠΎΠ΄Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ², Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅:
$ make -f Makefile1
make: *** No rule to make target 'main.c', needed by 'main.o'. Stop.
$
ΠΠΎΠΌΠ°Π½Π΄Π° make ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠ»Π°, ΡΡΠΎ ΠΏΠ΅ΡΠ²ΠΎΠ΅ Π·Π°Π΄Π°Π½ΠΈΠ΅ Π² make-ΡΠ°ΠΉΠ»Π΅, myapp, β ΡΡΠΎ ΡΠ°ΠΉΠ», ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ. ΠΠ°ΡΠ΅ΠΌ ΠΎΠ½Π° ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅Π»Π° ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΈ ΠΏΡΠ΅ΠΆΠ΄Π΅ Π²ΡΠ΅Π³ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ»Π°, ΡΡΠΎ Π½ΡΠΆΠ΅Π½ ΡΠ°ΠΉΠ», Π½Π°Π·Π²Π°Π½Π½ΡΠΉ main.c. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²Ρ Π²ΡΠ΅ Π΅ΡΠ΅ Π½Π΅ ΡΠΎΠ·Π΄Π°Π»ΠΈ ΡΡΠΎΡ ΡΠ°ΠΉΠ» ΠΈ Π² make-ΡΠ°ΠΉΠ»Π΅ Π½Π΅ ΡΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΎΠ·Π΄Π°Π½, ΠΊΠΎΠΌΠ°Π½Π΄Π° make Π²ΡΠ²Π΅Π»Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅. ΠΡΠ°ΠΊ, ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΈΡΡ ΠΎΠ΄Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΈ ΠΏΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΡΠ½ΠΎΠ²Π°. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π½Π°Ρ Π½Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ΅Ρ, ΡΡΠΈ ΡΠ°ΠΉΠ»Ρ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΡΠΌΠΈ. ΠΠ°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΏΡΡΡΡΠ΅, ΠΏΠΎΡΡΠΎΠΌΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ touch:
$ touch a.h
$ touch b.h
$ touch c.h
Π€Π°ΠΉΠ» main.c ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΡΠ½ΠΊΡΠΈΡ main, Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ function_two ΠΈ function_three. Π Π΄ΡΡΠ³ΠΈΡ Π΄Π²ΡΡ ΡΠ°ΠΉΠ»Π°Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ ΡΡΠ½ΠΊΡΠΈΠΈ function_two ΠΈ function_three. Π ΠΈΡΡ ΠΎΠ΄Π½ΡΡ ΡΠ°ΠΉΠ»Π°Ρ Π΅ΡΡΡ ΡΡΡΠΎΠΊΠΈ #include Π΄Π»Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ², ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΠ½ΠΈ ΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΡΠΌΠΈ ΠΎΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ Π²ΠΊΠ»ΡΡΠ΅Π½Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ². ΠΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ Π½Π°Π·ΠΎΠ²Π΅ΡΡ Π²ΡΠ΄Π°ΡΡΠΈΠΌΡΡ, Π½ΠΎ, ΡΠ΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π΄Π°Π»Π΅Π΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ Π»ΠΈΡΡΠΈΠ½Π³ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ:
/* main.c */
#include <stdlib.h>
#include "a.h"
extern void function_two();
extern void function_three();
int main() {
function_two();
function_three();
exit(EXIT_SUCCESS);
}
/* 2.c */
#include "a.h"
#include "b.h"
void function_two() { }
/* 3.Ρ */
#include "b.h"
#include "c.h"
void function_three() { }
Π’Π΅ΠΏΠ΅ΡΡ ΠΏΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ make Π΅ΡΠ΅ ΡΠ°Π·:
$ make -f Makefile1
gcc -Ρ main.Ρ gcc -Ρ 2.Ρ
gcc -Ρ 3.Ρ
gcc -ΠΎ myapp main.ΠΎ 2.ΠΎ 3.ΠΎ
$
ΠΠ° ΡΡΠΎΡ ΡΠ°Π· ΡΠ±ΠΎΡΠΊΠ° ΠΏΡΠΎΡΠ»Π° ΡΡΠΏΠ΅ΡΠ½ΠΎ.
ΠΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ
ΠΠΎΠΌΠ°Π½Π΄Π° make ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π»Π° ΡΠ΅ΠΊΡΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ make-ΡΠ°ΠΉΠ»Π° ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ»Π° ΡΠ°ΠΉΠ»Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ, ΠΈ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΠΈΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ. Π₯ΠΎΡΡ Π²Ρ ΡΠ½Π°ΡΠ°Π»Π° ΠΎΠΏΠΈΡΠ°Π»ΠΈ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ°ΠΉΠ» myapp, ΠΊΠΎΠΌΠ°Π½Π΄Π° make ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ»Π° ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ². ΠΠ°ΡΠ΅ΠΌ ΠΎΠ½Π° Π·Π°ΠΏΡΡΡΠΈΠ»Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΡΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ², ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠ΅ Π²Π°ΠΌΠΈ Π² ΡΠ΅ΠΊΡΠΈΠΈ ΠΏΡΠ°Π²ΠΈΠ». ΠΠΎΠΌΠ°Π½Π΄Π° make Π²ΡΠ²ΠΎΠ΄ΠΈΡ Π½Π° ΡΠΊΡΠ°Π½ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠ΅ Π΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ. Π’Π΅ΠΏΠ΅ΡΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ Π²Π°Ρ make-ΡΠ°ΠΉΠ», ΡΡΠΎΠ±Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ, ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ Π»ΠΈ ΠΎΠ½ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΡΠ°ΠΉΠ»Π΅ b.h:
$ touch b.h
$ make -f Makefile1
gcc -c 2.Ρ gcc -Ρ 3.c
gcc -o myapp main.ΠΎ 2.ΠΎ 3.o
$
ΠΠΎΠΌΠ°Π½Π΄Π° make ΠΏΡΠΎΡΠ»Π° Π²Π°Ρ make-ΡΠ°ΠΉΠ», ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ²ΡΠΈΠΉ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄, ΡΡΠ΅Π±ΡΠ΅ΠΌΡΡ Π΄Π»Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ myapp, ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΠ»Π° ΠΈΡ Π² ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ. Π’Π΅ΠΏΠ΅ΡΡ ΠΏΠΎΡΠΌΠΎΡΡΠΈΡΠ΅, ΡΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ, Π΅ΡΠ»ΠΈ Π²Ρ ΡΠ΄Π°Π»ΠΈΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΠΉ ΡΠ°ΠΉΠ»:
$ rm 2.o
$ make -f Makefile1
gcc -Ρ 2.c
gcc -ΠΎ myapp main.ΠΎ 2.ΠΎ 3.ΠΎ
$
Π ΡΠ½ΠΎΠ²Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° make ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π½ΡΠΆΠ½ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ.
ΠΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π² make-ΡΠ°ΠΉΠ»Π΅
ΠΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ Π² make-ΡΠ°ΠΉΠ»Π΅ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ ΡΠΎ Π·Π½Π°ΠΊΠ° # ΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΡΡΡ Π΄ΠΎ ΠΊΠΎΠ½ΡΠ° ΡΡΡΠΎΠΊΠΈ. ΠΠ°ΠΊ ΠΈ Π² ΠΈΡΡ ΠΎΠ΄Π½ΡΡ ΡΠ°ΠΉΠ»Π°Ρ Π½Π° ΡΠ·ΡΠΊΠ΅ Π‘, ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π² make-ΡΠ°ΠΉΠ»Π°Ρ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠΌΠΎΡΡ ΠΊΠ°ΠΊ Π°Π²ΡΠΎΡΡ, ΡΠ°ΠΊ ΠΈ Π΄ΡΡΠ³ΠΈΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ ΠΏΠΎΠ½ΡΡΡ, ΡΡΠΎ ΠΈΠΌΠ΅Π»ΠΎΡΡ Π² Π²ΠΈΠ΄Ρ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°.Sta
ΠΠ°ΠΊΡΠΎΡΡ Π² make-ΡΠ°ΠΉΠ»Π΅
ΠΠ°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π±Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ make ΠΈ make-ΡΠ°ΠΉΠ»ΠΎΠ² ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π»ΠΈΡΡ ΡΠ΅ΠΌ, ΡΡΠΎ ΡΠΆΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΎ, ΠΎΠ½ΠΈ Π±ΡΠ»ΠΈ Π±Ρ ΠΌΠΎΡΠ½ΡΠΌ ΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°ΠΌΠΈ Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎΠΌ ΠΈΡΡ ΠΎΠ΄Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ². ΠΠΎ ΡΡΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π° ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ Π³ΡΠΎΠΌΠΎΠ·Π΄ΠΊΠΈΠΌΠΈ ΠΈ Π½Π΅ΠΏΠΎΠ²ΠΎΡΠΎΡΠ»ΠΈΠ²ΡΠΌΠΈ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ , ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΡ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ°ΠΉΠ»ΠΎΠ². ΠΠΎΡΡΠΎΠΌΡ make-ΡΠ°ΠΉΠ»Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ°ΠΊΡΠΎΡΡ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠ΅ ΠΏΠΈΡΠ°ΡΡ ΡΡΠΈ ΡΠ°ΠΉΠ»Ρ Π² Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅.
ΠΠ°ΠΊΡΠΎΡΡ Π² make-ΡΠ°ΠΉΠ»Π΅ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ MAΠ‘RONAME=Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π·Π°ΡΠ΅ΠΌ ΡΡΡΠ»Π°ΡΡΡΡ Π½Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ, ΡΠΊΠ°Π·Π°Π² $(MACRONAME) ΠΈΠ»ΠΈ ${MACRONAME}. ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ Π²Π΅ΡΡΠΈΠΈ make ΠΌΠΎΠ³ΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ $MACRONAME. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°Π΄Π°ΡΡ ΠΏΡΡΡΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΌΠ°ΠΊΡΠΎΡΠ°, ΠΎΡΡΠ°Π²ΠΈΠ² ΠΏΡΡΡΠΎΠΉ ΡΠ°ΡΡΡ ΡΡΡΠΎΠΊΠΈ ΠΏΠΎΡΠ»Π΅ Π·Π½Π°ΠΊΠ° =.
ΠΠ°ΠΊΡΠΎΡΡ ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π² make-ΡΠ°ΠΉΠ»Π°Ρ Π΄Π»Ρ Π·Π°Π΄Π°Π½ΠΈΡ ΠΎΠΏΡΠΈΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°. ΠΠ±ΡΡΠ½ΠΎ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ Π±Π΅Π· ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΈ Ρ Π²ΠΊΠ»ΡΡΠ΅Π½Π½ΠΎΠΉ ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ. ΠΠ»Ρ ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π½ΡΠΆΠ½Ρ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ΅ΠΆΠΈΠΌΡ: ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΠΉ Π΄Π²ΠΎΠΈΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» Π±Π΅Π· ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠΉ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΡΡΡΠ΅Π΅.
ΠΡΠ΅ ΠΎΠ΄Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π² ΡΠ°ΠΉΠ»Π΅ Makefile1 β ΠΆΠ΅ΡΡΠΊΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ ΠΈΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° gcc. Π Π΄ΡΡΠ³ΠΈΡ UNIX-ΡΠΈΡΡΠ΅ΠΌΠ°Ρ Π²Ρ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π±ΡΠ΄Π΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ cc ΠΈΠ»ΠΈ c89. ΠΡΠ»ΠΈ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡΠ΄Ρ Π²Ρ Π·Π°Ρ ΠΎΡΠΈΡΠ΅ ΠΏΠ΅ΡΠ΅Π½Π΅ΡΡΠΈ Π²Π°Ρ make-ΡΠ°ΠΉΠ» Π² Π΄ΡΡΠ³ΡΡ Π²Π΅ΡΡΠΈΡ UNIX ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ Π΄ΡΡΠ³ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π΄Π»Ρ ΠΈΠΌΠ΅ΡΡΠ΅ΠΉΡΡ Ρ Π²Π°Ρ ΡΠΈΡΡΠ΅ΠΌΡ, ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΡΠΎΠΊ Π² Π²Π°ΡΠ΅ΠΌ make-ΡΠ°ΠΉΠ»Π΅, ΡΡΠΎΠ±Ρ Π·Π°ΡΡΠ°Π²ΠΈΡΡ Π΅Π³ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ. ΠΠ°ΠΊΡΠΎΡΡ β Ρ ΠΎΡΠΎΡΠΈΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠΎΠ±ΡΠ°ΡΡ Π²ΡΠ΅ ΡΡΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ·Π°Π²ΠΈΡΠΈΠΌΡΠ΅ ΡΠ°ΡΡΠΈ ΠΈ Π»Π΅Π³ΠΊΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΈΡ .
ΠΠ±ΡΡΠ½ΠΎ ΠΌΠ°ΠΊΡΠΎΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ Π² ΡΠ°ΠΌΠΎΠΌ make-ΡΠ°ΠΉΠ»Π΅, Π½ΠΎ ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡ ΠΈ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ make, Π΅ΡΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ°ΠΊΡΠΎΡΠ°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, make CC=c89. ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ, ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ Π΄Π°Π½Π½ΠΎΠΌΡ, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠ΅ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅, ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ Π·Π°Π΄Π°Π½Π½ΡΠ΅ Π² make-ΡΠ°ΠΉΠ»Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ. ΠΠ°Π΄Π°Π½Π½ΡΠ΅ Π²Π½Π΅ make-ΡΠ°ΠΉΠ»Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡΡΡ ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅ ΠΏΡΠΎΠ±Π΅Π»Ρ ΠΈΠ»ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΠΉΡΠ΅ ΠΊΠ°Π²ΡΡΠΊΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ: "CC = Ρ89".
ΠΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΡΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 9.2.
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 9.2. Make-ΡΠ°ΠΉΠ» Ρ ΠΌΠ°ΠΊΡΠΎΡΠΎΠΌΠΠ°Π»Π΅Π΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π° ΠΏΠ΅ΡΠ΅ΡΠ°Π±ΠΎΡΠ°Π½Π½Π°Ρ Π²Π΅ΡΡΠΈΡ make-ΡΠ°ΠΉΠ»Π° Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ Makefile2, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΠΌΠ°ΠΊΡΠΎΡΡ:
all: myapp
# ΠΠ°ΠΊΠΎΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ
Π‘Π‘ = gcc
# ΠΠ΄Π΅ Ρ ΡΠ°Π½ΡΡΡΡ ΡΠ°ΠΉΠ»Ρ include
INCLUDE = .
# ΠΠΏΡΠΈΠΈ Π΄Π»Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ
Π‘FLAGS = -g -Wall -ansi
# ΠΠΏΡΠΈΠΈ Π΄Π»Ρ ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ
# Π‘FLAGS = -Π -Wall -ansi
myapp: main.ΠΎ 2.o 3.o
$(CC) -ΠΎ myapp main.ΠΎ 2.o 3.o
main.ΠΎ: main.c a.h
$(CC) -I$(INCLUDE) $(CFLAGS) -Ρ main.c
2.ΠΎ: 2.c a.h b.h
$(CC) -I$(INCLUDE) $(CFLAGS) -c 2.c
3.o: 3.c b.h c.h
$(CC) -I$(INCLUDE) $(CFLAGS) -c 3.c
ΠΡΠ»ΠΈ ΡΠ΄Π°Π»ΠΈΡΡ ΠΏΡΠΎΡΠ»ΡΡ Π²Π΅ΡΡΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ make-ΡΠ°ΠΉΠ»Π°, Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
$ rm *.ΠΎ myapp
$ make -f Makefile2
gcc -I. -g -Wall -ansi -c main.c
gcc -I. -g -Wall -ansi -c 2.c
gcc -I. -g -Wall -ansi -c 3.c
gcc -o myapp main.ΠΎ 2.o 3.o
$
ΠΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° make Π·Π°ΠΌΠ΅Π½ΡΠ΅Ρ ΡΡΡΠ»ΠΊΠΈ Π½Π° ΠΌΠ°ΠΊΡΠΎΡΡ $(CC), $(CFLAGS) ΠΈ $(INCLUDE) ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡΠΌΠΈ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π‘ ΠΏΠΎΡΡΡΠΏΠ°Π΅Ρ Ρ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π°ΠΌΠΈ #define. Π’Π΅ΠΏΠ΅ΡΡ, Π΅ΡΠ»ΠΈ Π²Ρ Π·Π°Ρ ΠΎΡΠΈΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ, Π²Π°ΠΌ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½Ρ ΡΡΡΠΎΠΊΡ make-ΡΠ°ΠΉΠ»Π°.
Π£ ΠΊΠΎΠΌΠ°Π½Π΄Ρ make Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΡ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π΅ΡΠ΅ Π±ΠΎΠ»Π΅Π΅ ΡΠΎΠΊΡΠ°ΡΠΈΡΡ make-ΡΠ°ΠΉΠ»Ρ. Π ΡΠ°Π±Π». 9.1 ΠΌΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΠΈΠ»ΠΈ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ ΠΈΠ· Π½ΠΈΡ ; Π² ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ Π²Ρ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ ΠΈΡ Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΠΈ. ΠΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΡΡΠΈΡ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠ΅ΡΠ΅Π΄ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, ΠΏΠΎΡΡΠΎΠΌΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΌΠ°ΠΊΡΠΎΡΠ° ΠΌΠΎΠΆΠ΅Ρ ΠΌΠ΅Π½ΡΡΡΡΡ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ make-ΡΠ°ΠΉΠ»Π°. ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π² ΡΡΠΈΡ ΠΌΠ°ΠΊΡΠΎΡΠ°Ρ Π±ΡΠ»ΠΎ Π±Ρ ΠΎΡΠ΅Π½Ρ ΠΌΠ°Π»ΠΎ ΠΏΠΎΠ»ΡΠ·Ρ, Π΅ΡΠ»ΠΈ Π±Ρ ΠΎΠ½ΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°Π»ΠΈ ΠΈΠ½Π°ΡΠ΅.
Π’Π°Π±Π»ΠΈΡΠ° 9.1
ΠΠ°ΠΊΡΠΎΡ ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ $? Π‘ΠΏΠΈΡΠΎΠΊ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ ΡΡΠ»ΠΎΠ²ΠΈΠΉ (ΡΠ°ΠΉΠ»ΠΎΠ², ΠΎΡ ΠΊΠΎΡΠΎΡΡΡ Π·Π°Π²ΠΈΡΠΈΡ Π²ΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΡΠ°ΠΉΠ»), ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½ΡΡ ΠΏΠΎΠ·ΠΆΠ΅, ΡΠ΅ΠΌ ΡΠ΅ΠΊΡΡΠΈΠΉ Π²ΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΡΠ°ΠΉΠ» [email protected] ΠΠΌΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ Π·Π°Π΄Π°Π½ΠΈΡ $< ΠΠΌΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΠ°ΠΉΠ»Π°, ΠΎΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π·Π°Π²ΠΈΡΠΈΡ Π²ΡΡ ΠΎΠ΄Π½ΠΎΠΉ $* ΠΠΌΡ Π±Π΅Π· ΡΡΡΡΠΈΠΊΡΠ° ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΠ°ΠΉΠ»Π°, ΠΎΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π·Π°Π²ΠΈΡΠΈΡ Π²ΡΡ ΠΎΠ΄Π½ΠΎΠΉΠΡΡΡ Π΅ΡΠ΅ Π΄Π²Π° ΠΏΠΎΠ»Π΅Π·Π½ΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»Π°, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΠΏΠ΅ΡΠ΅Π΄ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ Π² make-ΡΠ°ΠΉΠ»Π΅:
β‘ ΡΠΈΠΌΠ²ΠΎΠ» - Π·Π°ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ make ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ Π»ΡΠ±ΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠ΅Π»ΠΈ Π±Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ΠΈ ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ Π»ΡΠ±ΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ, ΡΠΊΠ°ΠΆΠ΅ΠΌ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠ°ΠΊΠΎΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ, Π²Ρ ΠΏΡΠΎΡΡΠΎ ΡΡΠ°Π²ΠΈΡΠ΅ Π·Π½Π°ΠΊ "ΠΌΠΈΠ½ΡΡ" ΠΏΠ΅ΡΠ΅Π΄ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ mkdir. Π§ΡΡΡ ΠΏΠΎΠ·ΠΆΠ΅ Π² ΡΡΠΎΠΉ Π³Π»Π°Π²Π΅ Π²Ρ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Π° -;