Π§ΡΠΎΠ±Ρ Π½Π°ΠΏΠ΅ΡΠ°ΡΠ°ΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Π½Π΅ΡΠ²Π½ΡΡ ΠΏΡΠ°Π²ΠΈΠ» GNU make, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ make -p.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ make-ΡΠ°ΠΉΠ»Π° ΠΈΠ· ΠΏΡΠΈΠΌΠ΅ΡΠ° 1.18 ΠΏΡΠ΅ΡΠ΅ΠΊΠ²ΠΈΠ·ΠΈΡ hello ΡΠ΅Π»ΠΈ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ all ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠΌ. Π₯ΠΎΡΡ hello ΡΠΈΠ³ΡΡΠΈΡΡΠ΅Ρ ΠΊΠ°ΠΊ ΡΠ΅Π»Ρ ΠΏΡΠ°Π²ΠΈΠ»Π° $(OUTPUTFILE): hello.cpp, ΡΡΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠ³ΠΎ ΡΡΠ΅Π½Π°ΡΠΈΡ, ΠΈ, ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΎΠ½ΠΎ Π±Π΅ΡΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ ΡΠ°ΠΉΠ»Π° hello. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, make Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΏΠΎΠΈΡΠΊ Π² ΡΠ²ΠΎΠ΅ΠΉ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΉ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ ΠΈ Π½Π°Ρ ΠΎΠ΄ΠΈΡ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ 1.19. ΠΠΎΠ΄ΡΡΠ°Π²Π»ΡΡ Π² ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΠΈΠ· ΠΏΡΠΈΠΌΠ΅ΡΠ° 1.19 Π²ΠΌΠ΅ΡΡΠΎ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΎΡΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΠΊΠ° ΡΡΡΠΎΠΊΡ hello, make Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ Ρ hello Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ΅Π»ΠΈ.
hello: hello.cpp
$(LINK.cpp) $(LOADLIBS) $(LDLIBS) -o [email protected]
ΠΠΎΠΊΠ° Π²ΡΠ΅ Ρ ΠΎΡΠΎΡΠΎ, Π½ΠΎ Π΅ΡΡΡ Π΅ΡΠ΅ ΠΊΠΎΠ΅-ΡΡΠΎ. ΠΠΎΠ²ΡΠΎΡΠ½ΡΠΉ Π²Π·Π³Π»ΡΠ΄ Π½Π° Π²Π½ΡΡΡΠ΅Π½Π½ΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ make ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ LINK.cpp ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ°ΡΠΊΡΡΠ²Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ $(LINK.cc). Π ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ LINK.cc ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ°ΡΠΊΡΡΠ²Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ
$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ CXX ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ°ΡΠΊΡΡΠ²Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ g++, Π° ΡΠ΅ΡΡΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ β $(CXXFLAGS), $(CPPFLAGS), $(LDFLAGS) ΠΈ $(TARGET_ARCH) β ΡΠ°ΡΠΊΡΡΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ ΠΏΡΡΡΡΠ΅ ΡΡΡΠΎΠΊΠΈ. ΠΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π²ΡΠ΅Ρ ΡΡΠΈΡ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΎΠΊ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠ΅ΠΏΠ΅ΡΡ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Π±ΠΎΠ»Π΅Π΅ Π·Π½Π°ΠΊΠΎΠΌΠΎ.
hello: hello.cpp
g++ $^ -o [email protected]
ΠΠ°ΠΏΡΡΠ°Π»ΠΈΡΡ? ΠΡΠΎ Π½Π΅ ΡΡΡΠ°ΡΠ½ΠΎ. ΠΡΠ»ΠΈ Π²Ρ ΠΈΠ·ΡΡΠΈΡΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ ΠΎΠ±ΡΡΡΠ½Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΡΡΠ°ΡΠΈΡΠ΅ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠ΅ΠΌΡ Π½Π° ΠΈΠ·ΡΡΠ΅Π½ΠΈΠ΅ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΉ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ make, Π½Π΅ΡΠ²Π½ΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΏΡΠΈΠΎΠ±ΡΠ΅ΡΡΡ ΡΠΌΡΡΠ».
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π΄Π»Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΠ’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° Π²Ρ ΡΠ²ΠΈΠ΄Π΅Π»ΠΈ, ΠΊΠ°ΠΊ ΡΠ°Π±Π»ΠΎΠ½Π½ΠΎΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΠΈΠ· ΠΏΡΠΈΠΌΠ΅ΡΠ° 1.19 ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎ make ΡΠΎΠ±ΠΈΡΠ°Π΅Ρ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ» hello ΠΈΠ· ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° hello.cpp, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΏΡΠΎΡΠΈΡΡ, ΠΏΠΎΡΠ΅ΠΌΡ Π±ΡΠ»ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΡ ΡΠ°Π³ΠΎΠ². ΠΠΎΡΠ΅ΠΌΡ Π²ΠΌΠ΅ΡΡΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎΠ³ΠΎ ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΈΠ· ΠΏΡΠΈΠΌΠ΅ΡΠ° 1.19 Π²ΠΎ Π²Π½ΡΡΡΠ΅Π½Π½ΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ make ΠΏΡΠΎΡΡΠΎ Π½Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ
%: %.cpp
g++ $^ -ΠΎ [email protected]
ΠΡΠ²Π΅Ρ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ $(CXX), $(CXXFLAGS), $(CPPFLAGS) ΠΈ $(LDFLAGS), ΡΠ»ΡΠΆΠ°Ρ ΠΊΠ°ΠΊ ΡΠΎΡΠΊΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ (customization points). ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΊΠ°Π·Π°Π² Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ LDFLAGS Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅, Π² make-ΡΠ°ΠΉΠ»Π΅ ΠΈΠ»ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ² Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΡΠ΅Π΄Ρ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ»Π°Π³ΠΈ, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊΡ. ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ CPPFLAGS ΠΈ CXXFLAGS ΠΈΠ³ΡΠ°ΡΡ ΡΡ ΠΎΠΆΡΡ ΡΠΎΠ»Ρ Π΄Π»Ρ ΠΎΠΏΡΠΈΠΉ ΠΏΡΠ΅ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° C++ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ. Π ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ² Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ CXX, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ, ΠΎΡΠ»ΠΈΡΠ½ΡΠΉ ΠΎΡ GCC. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠΎΠ±Ρ ΡΠΎΠ±ΡΠ°ΡΡ hello Ρ ΠΏΠΎΠΌΠΎΡΡΡ Intel Π΄Π»Ρ Linux ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ make-ΡΠ°ΠΉΠ» ΠΈΠ· ΠΏΡΠΈΠΌΠ΅ΡΠ° 1.18, Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ Π²Π²Π΅ΡΡΠΈ make CXX=icpc, ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ, ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΡΠ΅Π΄Ρ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° Intel, ΡΠΆΠ΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ.
VPATH ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π° vpathΠ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ 1.18 make ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ΅ ΡΠ°Π±Π»ΠΎΠ½Π½ΠΎΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠ°ΠΉΠ» .cpp Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠΎΠΉ ΠΆΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π²ΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΡΠ°ΠΉΠ». ΠΡΠ»ΠΈ ΠΈΡΡ ΠΎΠ΄Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² Π΄ΡΡΠ³ΠΎΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ, ΡΠΎ Π΄Π»Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΡ make, Π³Π΄Π΅ ΠΈΡΠΊΠ°ΡΡ ΡΠ΅Π»ΠΈ ΠΈΠ»ΠΈ ΠΏΡΠ΅ΡΠ΅ΠΊΠ²ΠΈΠ·ΠΈΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ VPATH.
VPATH = <ΠΏΡΡΡ-ΠΊ-ΡΠ°ΠΉΠ»Π°ΠΌ-cpp>
Π§ΡΠΎΠ±Ρ ΡΠΊΠ°Π·Π°ΡΡ make, ΡΡΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΏΠΎΠΈΡΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΡΠΈΠΏΠΎΠ² ΡΠ°ΠΉΠ»ΠΎΠ² ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ vpath.
# ΠΈΡΠΊΠ°ΡΡ ΡΠ°ΠΉΠ»Ρ .exp Π² ../lib
vpath %. exp../lib
Π‘ΠΌΠΎΡΡΠΈ ΡΠ°ΠΊΠΆΠ΅Π Π΅ΡΠ΅ΠΏΡΡ 1.2 ΠΈ 1.7.
1.16. Π‘Π±ΠΎΡΠΊΠ° ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ GNU Make
ΠΡ Ρ ΠΎΡΠΈΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ GNU make Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈΠ· Π½Π°Π±ΠΎΡΠ° ΠΈΡΡ ΠΎΠ΄Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² C++, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΠ΅ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ 1.1.
Π Π΅ΡΠ΅Π½ΠΈΠ΅ΠΠ½Π°ΡΠ°Π»Π΅ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ, Π³Π΄Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΡΠΎΠ·Π΄Π°Π½Π° ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ make-ΡΠ°ΠΉΠ» ΠΈ ΠΎΠ±ΡΡΠ²ΠΈΡΠ΅ ΡΠΈΠΊΡΠΈΠ²Π½ΡΡ ΡΠ΅Π»Ρ all, Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΌ ΠΏΡΠ΅ΡΠ΅ΠΊΠ²ΠΈΠ·ΠΈΡΠΎΠΌ ΠΊΠΎΡΠΎΡΠΎΠΉ Π±ΡΠ΄Π΅Ρ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°. ΠΠ°ΡΠ΅ΠΌ ΠΎΠ±ΡΡΠ²ΠΈΡΠ΅ ΡΠ΅Π»Ρ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. ΠΠ΅ ΠΏΡΠ΅ΡΠ΅ΠΊΠ²ΠΈΠ·ΠΈΡΠ°ΠΌΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ, Π²Ρ ΠΎΠ΄ΡΡΠΈΠ΅ Π² ΡΠΎΡΡΠ°Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, Π° Π΅Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡΠΉ ΡΡΠ΅Π½Π°ΡΠΈΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡΡ ΡΡΡΠΎΠΊΡ Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈΠ· Π½Π°Π±ΠΎΡΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ², Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡ Π² ΡΠ΅ΡΠ΅ΠΏΡΠ΅ 1.3. ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ GCC ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° Ρ ΠΏΠΎΡ ΠΎΠΆΠΈΠΌ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π½Π°ΡΡΡΠΎΠΉΡΠ΅, Π΅ΡΠ»ΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ, Π½Π΅ΡΠ²Π½ΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ², ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ² ΠΎΠ΄Π½Ρ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ CXX, CXXFLAGS ΠΈ Ρ.ΠΏ., ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ Π½Π΅ΡΠ²Π½ΡΡ ΠΏΡΠ°Π²ΠΈΠ» make, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ΅ΡΠ΅ΠΏΡΠ΅ 1.15. Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΡΠ°Π±Π»ΠΎΠ½Π½ΡΡ ΠΏΡΠ°Π²ΠΈΠ», ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π² ΡΠ΅ΡΠ΅ΠΏΡΠ΅ 1.16, Π½Π°ΠΏΠΈΡΠΈΡΠ΅ ΡΠ°Π±Π»ΠΎΠ½Π½ΠΎΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π³ΠΎΠ²ΠΎΡΡΡΠ΅Π΅ make, ΠΊΠ°ΠΊ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΠΈΠ· ΡΠ°Π±Π». 1.8 ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ .cpp-ΡΠ°ΠΉΠ»Ρ Π² ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΠ΅. ΠΠ°Π»Π΅Π΅ ΡΠ²Π½ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠ²Π½ΠΎ ΠΎΠ±ΡΡΠ²ΠΈΡΠ΅ ΡΠ΅Π»ΠΈ, ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΠ΅, ΠΊΠ°ΠΊ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΠΈΡΡ ΠΎΠ΄Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Π²ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΡ Π² Π½Π΅Π³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ². ΠΡΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°ΡΡ Π²ΡΡΡΠ½ΡΡ ΠΈΠ»ΠΈ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ. ΠΠ°ΠΊΠΎΠ½Π΅Ρ, Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠ΅Π»ΠΈ install ΠΈ clean, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ΅ΡΠ΅ΠΏΡΠ΅ 1.15.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠΎΠ±Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ GCC Π² Unix ΡΠΎΠ±ΡΠ°ΡΡ ΠΈΠ· ΠΈΡΡ ΠΎΠ΄Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ², ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΡ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ 1.2, ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ, ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ johnpaul make-ΡΠ°ΠΉΠ», ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΡΠΉ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ 1.20.
ΠΡΠΈΠΌΠ΅Ρ 1 20. make-ΡΠ°ΠΉΠ» Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ libjohnpaul.a Ρ ΠΏΠΎΠΌΠΎΡΡΡ GCC Π² Unix
# Π£ΠΊΠ°ΠΆΠΈΡΠ΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ², ΡΠ΄Π°Π»ΡΠ΅ΠΌΡΡ ΠΏΡΠΈ ΠΎΡΠΈΡΡΠΊΠ΅
CLEANEXTS - ΠΎ Π°
# Π£ΠΊΠ°ΠΆΠΈΡΠ΅ ΡΠ΅Π»Π΅Π²ΠΎΠΉ ΡΠ°ΠΉΠ» ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ
OUTPUTFILE = libjohnpaul.a
INSTALLDIR = ../binaries
# Π¦Π΅Π»Ρ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
.PHONY: all
all: $(OUTPUTFILE)
# Π‘ΠΎΠ±Π΅ΡΠΈΡΠ΅ libjohnpaul.a ΠΈΠ· john.o. paul.o ΠΈ johnpaul.Ρ
$(OUTPUTFILE): john.o paul.o johnpaul.ΠΎ
ar ru [email protected] $^
ranlib [email protected]
# ΠΠ»Ρ ΡΠ±ΠΎΡΠΊΠΈ john.o, paul.o ΠΈ johnpaul.ΠΎ ΠΈΠ· ΡΠ°ΠΉΠ»ΠΎΠ² .cpp
# ΠΏΡΠ°Π²ΠΈΠ»Π° Π½Π΅ ΡΡΠ΅Π±ΡΡΡΡΡ; ΡΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΡΡΡ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ
# Π½Π΅ΡΠ²Π½ΡΡ ΠΏΡΠ°Π²ΠΈΠ» make
.PHONY: install
install:
mkdir -p $(INSTALLDIR)
cp -p $(OUTPUTFILE) $(INSTALLDIR)
.PHONY: clean
clean:
for file in $(CLEANEXTS); do rm -f *.$$file; done
# Π£ΠΊΠ°ΠΆΠΈΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΡΠ°ΠΉΠ»ΠΎΠ² cpp ΠΎΡ ΡΠ°ΠΉΠ»ΠΎΠ² .hpp
john.o: john.hpp
paul.o: paul.hpp
johnpaul.o: john.hpp paul.hpp johnpaul.hpp
ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ, ΡΡΠΎΠ±Ρ ΡΠΎΠ±ΡΠ°ΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Visual Π‘++, Π²Π°Ρ make-ΡΠ°ΠΉΠ» Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ 1.21.
ΠΡΠΈΠΌΠ΅Ρ 1.21. make-ΡΠ°ΠΉΠ» Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ libjohnpaul.lib Ρ ΠΏΠΎΠΌΠΎΡΡΡ Visual C++
# Π£ΠΊΠ°ΠΆΠΈΡΠ΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ², ΡΠ΄Π°Π»ΡΠ΅ΠΌΡΡ ΠΏΡΠΈ ΠΎΡΠΈΡΡΠΊΠ΅
CLEANEXTS = obj lib
# Specify the target file and the install directory
OUTPUTFILE = libjohnpaul.lib
INSTALLDIR = ./binaries
# Π¨Π°Π±Π»ΠΎΠ½Π½ΠΎΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΠΈΠ· ΡΠ°ΠΉΠ»Π° .cpp
%.obj: %.cpp
"$(MSVCDIR)/bin/cl" -Ρ -nologo -EHsc -GP -Zc:forScope -Zc:wchar_t \
$(CXXFLAGS) S(CPPFLAGS) -Fo" [email protected]" $<
# Π€ΠΈΠΊΡΠΈΠ²Π½Π°Ρ ΡΠ΅Π»Ρ
.PHONY: all
all: $(OUTPUTFILE)
# Π‘ΠΎΠ±Π΅ΡΠΈΡΠ΅ libjohnpaul.lib ΠΈΠ· john.obj, paul.obj ΠΈ johnpaul.obj
$(OUTPUTFILE): john.obj paul.obj johnpaul.obj
"$(MSVCDIR)/bin/link" -lib -nologo -out:" [email protected]" $^
.PHONY: install
install:
mkdir -p $(INSTALLDIR)
cp -p $(OUTPUTFILE) $(INSTALLDIR)
.PHONY: clean
clean:
for file in $(CLEANEXTS); do rm -f *.$$file; done
# Π£ΠΊΠ°ΠΆΠΈΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΡΠ°ΠΉΠ»ΠΎΠ² .cpp ΠΎΡ ΡΠ°ΠΉΠ»ΠΎΠ² .hpp
john.obj: john.hpp
paul.obj: paul.hpp
johnpaul.obj: john.hpp paul.hpp johnpaul.hpp
Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ 1.21 Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΡΠ΅Π΄Ρ MSVCDIR, ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌΠΎΠΉ Π² vcvars32.bat, ΠΏΠΎΠΊΠ°Π·Π°Π» ΠΊΠΎΠΌΠ°Π½Π΄Ρ Visual C++ link.exe ΠΊΠ°ΠΊ "$(MSVCDIR)/bin/link". ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΏΡΡΠ°Π½ΠΈΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊΠΎΠΌ Visual C++ ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ Unix link, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠΉ Cygwin ΠΈ MSYS. ΠΠ»Ρ ΠΏΠΎΠ»Π½ΠΎΡΡ ΠΊΠ°ΡΡΠΈΠ½Ρ Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» MSVCDIR Π΄Π»Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Visual Π‘++.
ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ 1.20. ΠΠ½Π°ΡΠ°Π»Π΅ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΠ΅ Π²ΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΡΠ°ΠΉΠ», Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ΄Π°Π»ΡΡΡΡΡ ΠΏΡΠΈ ΡΠ±ΠΎΡΠΊΠ΅ ΡΠ΅Π»ΠΈ clean. ΠΠ°ΡΠ΅ΠΌ Ρ ΠΎΠ±ΡΡΠ²Π»ΡΡ ΡΠ΅Π»Ρ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ all, ΠΊΠ°ΠΊ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ 1.14.
ΠΡΠ°Π²ΠΈΠ»ΠΎ Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ.
$(OUTPUTFILE): john.o paul.o johnpaul.ΠΎ
ar ru [email protected] $^
ranlib [email protected]
ΠΡΠΎ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½Π°Ρ Π°Π΄Π°ΠΏΡΠ°ΡΠΈΡ Π·Π°ΠΏΠΈΡΠΈ Π΄Π»Ρ GCC ΠΈΠ· ΡΠ°Π±Π». 1.10. ΠΠ΄Π΅ΡΡ $(OUTPUTFILE) ΠΈ [email protected] ΡΠ°ΡΠΊΡΡΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ libjohnpaul.a, Π° $^ ΡΠ°ΡΠΊΡΡΠ²Π°Π΅ΡΡΡ Π² Π²ΠΈΠ΄Π΅ ΡΠΏΠΈΡΠΊΠ° ΠΏΡΠ΅ΡΠ΅ΠΊΠ²ΠΈΠ·ΠΈΡΠΎΠ² john.o paul.o johnpaul.ΠΎ.
Π‘Π»Π΅Π΄ΡΡΡΠΈΠ΅ Π΄Π²Π° ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΎΠ±ΡΡΠ²Π»ΡΡΡ ΡΠ΅Π»ΠΈ install ΠΈ clean, ΠΊΠ°ΠΊ Π² ΡΠ΅ΡΠ΅ΠΏΡΠ΅ 1.15. ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ 1.20 Π΄Π»Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ Π²ΡΠ΅Ρ ΡΠ°ΠΉΠ»ΠΎΠ², ΡΡΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΠΈΠΌΠ΅ΡΡΡΡ Π² ΡΠΏΠΈΡΠΊΠ΅ ΠΎ Π° β Ρ. Π΅. Π²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΈ ΡΠ°ΠΉΠ»Ρ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, - Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠΈΠΊΠ» ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ.
for file in $(CLEANEXTS); do rm -f *.$$file; done