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

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

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

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

 ar -rv mylib.a $?

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

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

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

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

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

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

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

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

$ gcc -MM main.с 2.с 3.с

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

Другая Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ управлСния вашими сборками ΠΈΠ»ΠΈ Π½Π° самом Π΄Π΅Π»Π΅ Π΄Ρ€ΡƒΠ³ΠΎΠΉ способ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ Π·Π°Π΄Π°Ρ‡ β€” ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° ANT. Π­Ρ‚ΠΎ срСдство Π½Π° Π±Π°Π·Π΅ языка Java, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, написанныС Π½Π° языкС XML. Π•Π΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ Π² ОБ Linux для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ создания исполняСмых Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ· Ρ„Π°ΠΉΠ»ΠΎΠ² Π½Π° языкС Π‘, поэтому ΠΌΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΠΎΠ±ΡΡƒΠΆΠ΄Π°Ρ‚ΡŒ Π΅Π΅ Π² ΠΊΠ½ΠΈΠ³Π΅. Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± ANT ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π½Π° Web-сайтС http://ant.apache.org/.

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ исходным ΠΊΠΎΠ΄ΠΎΠΌ

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

Π’ срСдС UNIX Π΅ΡΡ‚ΡŒ нСсколько ΡˆΠΈΡ€ΠΎΠΊΠΎ распространСнных систСм управлСния исходными Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ:

β–‘ SCCS (Source Code Control System);

β–‘ RCS (Revision Control System);

β–‘ CVS (Concurrent Version System);

β–‘ Subversion.

SCCS ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π±Ρ‹Π»Π° систСмой управлСния исходным ΠΊΠΎΠ΄ΠΎΠΌ, Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ AT&T Π² вСрсии System V ОБ UNIX, Π° сСйчас ΠΎΠ½Π° β€” Ρ‡Π°ΡΡ‚ΡŒ стандарта X/Open. RCS Π±Ρ‹Π»Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π° ΠΏΠΎΠ·ΠΆΠ΅ ΠΊΠ°ΠΊ бСсплатная Π·Π°ΠΌΠ΅Π½Π° SCCS ΠΈ распространяСтся Π€ΠΎΠ½Π΄ΠΎΠΌ бСсплатного ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния (Free Software foundation). RCS Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠ° Π½Π° SCCS, Π½ΠΎ с ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ понятным интСрфСйсом ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ опциями, поэтому систСма SCCS ΠΏΠΎ большСй части вытСснСна RCS.

Π£Ρ‚ΠΈΠ»ΠΈΡ‚Ρ‹ RCS ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² дистрибутивы Linux ΠΈΠ»ΠΈ ΠΆΠ΅ ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΈΠ· Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π° вмСстС с исходными Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ с Web-сайта Π€ΠΎΠ½Π΄Π° бСсплатного ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния со страницы http://directory.fsf.org/rcs.html.

CVS β€” Π±ΠΎΠ»Π΅Π΅ пСрСдовая, Ρ‡Π΅ΠΌ SCCS ΠΈΠ»ΠΈ RCS, систСма, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ инструмСнтом для совмСстных Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΎΠΊ Π½Π° Π±Π°Π·Π΅ Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π°. Π•Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ дистрибутивов Linux ΠΈΠ»ΠΈ ΠΏΠΎ адрСсу http://www.nongnu.org/cvs/. Π£ этой систСмы Π΄Π²Π° сущСствСнных прСимущСства ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с RCS: Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π² сСтСвых соСдинСниях ΠΈ ΠΎΠ½Π° допускаСт ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

Subversion β€” Π½ΠΎΠ²ΠΎΠ΅ Π΄Π΅Ρ‚ΠΈΡ‰Π΅, входящСС Π² Π±Π»ΠΎΠΊ, ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ для Π·Π°ΠΌΠ΅Π½Ρ‹ систСмы CVS ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ. ΠΠ°Ρ‡Π°Π»ΡŒΠ½ΡƒΡŽ страницу Web-сайта этой систСмы ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΏΠΎ адрСсу http://www.subversion.org.

Π’ этой Π³Π»Π°Π²Π΅ ΠΌΡ‹ сосрСдоточимся Π½Π° систСмах RCS ΠΈ CVS; Π²Ρ‹Π±ΠΎΡ€ RCS ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ Π»Π΅Π³ΠΊΠΎΡΡ‚ΡŒΡŽ Π΅Π΅ использования Π² ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…, Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΉ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒΡŽ с ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ make, a CVS Π²Ρ‹Π±Ρ€Π°Π½Π° ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ это самая популярная Ρ„ΠΎΡ€ΠΌΠ° управлСния исходным ΠΊΠΎΠ΄ΠΎΠΌ, примСняСмая Π² совмСстных ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…. ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΡ€Π°Ρ‚ΠΊΠΎ сравним ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ RCS с ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ SCCS, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ послСдняя ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ статусом стандарта POSIX, ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ CVS с ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ систСмы Subversion.

RCS

Revision Control System (RCS, систСма управлСния вСрсиями) содСрТит ряд ΠΊΠΎΠΌΠ°Π½Π΄ для управлСния исходными Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ. Она Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΡƒΠ΅Ρ‚, отслСТивая исходный Ρ„Π°ΠΉΠ» ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ Π΅Π³ΠΎ измСнСния ΠΈ сохраняя Π΅Π΄ΠΈΠ½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» со списком ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, достаточно ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΌ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π²ΠΎΡΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ Ρ„Π°ΠΉΠ»Π°. БистСма Ρ‚Π°ΠΊΠΆΠ΅ позволяСт Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ, связанныС с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌΠΈ, Ссли Π²Ρ‹ ΠΎΠ³Π»ΡΠ΄Ρ‹Π²Π°Π΅Ρ‚Π΅ΡΡŒ Π½Π°Π·Π°Π΄, изучая Ρ…Ρ€ΠΎΠ½ΠΎΠ»ΠΎΠ³ΠΈΡŽ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Ρ„Π°ΠΉΠ»Π°.

По ΠΌΠ΅Ρ€Π΅ продвиТСния ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ„Π°ΠΉΠ»Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ исправлСниС ошибки ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ измСнСнию. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ ΠΏΡ€ΠΈ просмотрС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, внСсСнных Π² Ρ„Π°ΠΉΠ», ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠ² с исправлСнными ошибками, ΠΈ ΠΈΠ½ΠΎΠ³Π΄Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈ внСсСнными ошибками!

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ RCS сохраняСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ различия ΠΌΠ΅ΠΆΠ΄Ρƒ вСрсиями, ΠΎΠ½Π° эффСктивно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ дисковоС пространство. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, систСма позволяСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ вСрсии Π² случаС ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΠΎΠ³ΠΎ удалСния.

Команда rcs

Для ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΈ сказанного Π½Π°Ρ‡Π½ΠΈΡ‚Π΅ с Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ вСрсии Ρ„Π°ΠΉΠ»Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» important.c, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ сущСствованиС ΠΊΠ°ΠΊ копия Ρ„Π°ΠΉΠ»Π° foo.с со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅ΠΌ, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹ΠΌ Π² Π½Π°Ρ‡Π°Π»ΠΎ Ρ„Π°ΠΉΠ»Π°:

/*

 Π­Ρ‚ΠΎ Π²Π°ΠΆΠ½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» для управлСния Π΄Π°Π½Π½Ρ‹ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ.

 Π’ Π½Π΅ΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° каноничСская ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° "Hello World".

*/

ΠŸΠ΅Ρ€Π²Π°Ρ Π·Π°Π΄Π°Ρ‡Π° β€” ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ RCS-ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ Ρ„Π°ΠΉΠ»ΠΎΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ rcs. Команда rcs -i ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ„Π°ΠΉΠ» RCS-управлСния.

$ rcs -i important.с

RCS file: important.с,v

enter description, terminated with single '.' or end of file:

NOTE: This is NOT the log message!

>> This is an important demonstration file

>> .

done

$

Π Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ мноТСствСнныС строки ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π². Π—Π°Π²Π΅Ρ€ΡˆΠΈΡ‚Π΅ строку ΠΏΡ€ΠΈΠ³Π»Π°ΡˆΠ΅Π½ΠΈΡ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ (.) Π² самой строкС ΠΈΠ»ΠΈ Π½Π°Π±Ρ€Π°Π² символ ΠΊΠΎΠ½Ρ†Π° Ρ„Π°ΠΉΠ»Π°, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠ΅ΠΉ клавиш <Ctrl>+<D>.

ПослС этой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ rcs создаСтся Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния (read-only) Ρ„Π°ΠΉΠ» с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ v.

$ ls -l

-rw-r--r-- 1 neil users 225 2007-07-09 07:52 important.c

-r--r--r-- 1 neil users 105 2007-07-09 07:52 important.с,v

$