Π‘Π»ΡƒΠΆΠΈΡ‚Π΅Π» Π½Π° Red Hat прСдстави систСмата Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Goals. ИзданиС Π½Π° GNU Make 4.2

Π ΠΈΡ‡Π°Ρ€Π΄ ДТонс (Richard WM Jones), Π°Π²Ρ‚ΠΎΡ€ libguestfs, Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ Π² компанията Red Hat, прСдстави Π½ΠΎΠ² инструмСнт Π·Π° компилация Π¦Π΅Π»ΠΈ, насочСн към отстраняванС Π½Π° Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ†ΠΈΡ‚Π΅ ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅ Π² инструмСнта make, ΠΊΠ°Ρ‚ΠΎ ΡΡŠΡ‰Π΅Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π·Π°ΠΏΠ°Π·Π²Π° ΠΎΠ±Ρ‰Π°Ρ‚Π° простота ΠΈ разбираСмост Π½Π° скриптовСтС. Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ΡŠΡ‚ make Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€Π°Π½ ΠΏΡ€Π΅Π· 1976 Π³ΠΎΠ΄ΠΈΠ½Π° ΠΈ ΠΈΠΌΠ° Ρ€Π΅Π΄ΠΈΡ†Π° ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»Π½ΠΈ нСдоносСности, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΠ»Π°Π½ΠΈΡ€Π°ΠΌΠ΅ Π΄Π° отстраним Π² Goals, Π±Π΅Π· Π΄Π° промСнямС ΠΎΠ±Ρ‰Π°Ρ‚Π° концСпция.
Π˜Π·Ρ…ΠΎΠ΄Π΅Π½ ΠΊΠΎΠ΄ Π½Π° Goals сС разпространява ΠΏΠΎ Π»ΠΈΡ†Π΅Π½Π· GPLv2+.

РСшавани ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ:

  • ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° само Π½Π° Π΅Π΄Π½Π° Ρ‚Π°ΠΊΡ‚ΠΈΠΊΠ° Π·Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° зависимости β€” β€žΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡΡ‚Π° Π·Π° компилация сС изпълнява, Π°ΠΊΠΎ цСлСвият Ρ„Π°ΠΉΠ» липсва ΠΈΠ»ΠΈ Π΅ ΠΏΠΎ-стар ΠΎΡ‚ Π΅Π΄Π½Π° ΠΎΡ‚ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈΡ‚Π΅β€œ. Π’ Goals ΠΏΠ»Π°Π½ΠΈΡ€Π°ΠΌΠ΅ Π΄Π° Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ Ρ‚Π°ΠΊΡ‚ΠΈΠΊΠΈ, ΠΊΠ°Ρ‚ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π½Π° URL, сравняванС Π½Π° Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π½Π° промяна с всСки Ρ„Π°ΠΉΠ», ΠΎΡ†Π΅Π½ΠΊΠ° Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π² Koji, сравняванС Π½Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π½ΠΈ суми, изпълнСниС Π½Π° тСстови Π½Π°Π±ΠΎΡ€ΠΈ с ΠΈΠ·Π±ΠΈΡ€Π°Ρ‚Π΅Π»Π½ΠΎ пропусканС Π½Π° тСстовСтС.
  • ΠŸΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Ρ†Π΅Π»ΠΈΡ‚Π΅ Π·Π° сборка, ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°Ρ‚Π° make Π½Π΅ раздСля Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅ ΠΈ ΠΈΠΌΠ΅Π½Π°Ρ‚Π° Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° ΠΈ, слСдоватСлно, липсва ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π΄Π°Π»ΠΈ ΠΏΡ€ΠΈ изпълнСниС Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»ΠΎΡ‚ΠΎ наистина Ρ‰Π΅ бъдС създадСн Ρ„Π°ΠΉΠ»ΡŠΡ‚, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ заявСн. НапримСр, Π°ΠΊΠΎ случайно бъдС създадСн Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅ β€žtestβ€œ ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ с ΠΈΠΌΠ΅Ρ‚ΠΎ β€žtestβ€œ, ΠΊΠΎΠ΅Ρ‚ΠΎ изпълнява тСстови скриптовС, тСстовСтС няма Π΄Π° сС ΠΈΠ·Π²ΠΈΠΊΠ²Π°Ρ‚, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ make Ρ‰Π΅ ΠΏΡ€ΠΈΠ΅ΠΌΠ΅, Ρ‡Π΅ Ρ†Π΅Π»Ρ‚Π° Π΅ сборСна ΠΈ Π½Π΅ изисква ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΊΠ°ΠΊΠ²ΠΈΡ‚ΠΎ ΠΈ Π΄Π° Π±ΠΈΠ»ΠΎ дСйствия (Π·Π° Π΄Π° сС Π·Π°ΠΎΠ±ΠΈΠΊΠΎΠ»ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ Π² make ΠΌΠΎΠΆΠ΅ Π΄Π° сС посочи Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°Ρ‚Π° β€ž.PHONY: testβ€œ). Goals явно раздСля Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅ ΠΈ ΠΈΠΌΠ΅Π½Π°Ρ‚Π° Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π°.

    Π‘Π»ΡƒΠΆΠΈΡ‚Π΅Π» Π½Π° Red Hat прСдстави систСмата Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Goals. ИзданиС Π½Π° GNU Make 4.2
  • ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ с прСдоставянСто Π½Π° само Π΅Π΄ΠΈΠ½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ Π·Π° инструкциитС Π·Π° сборка.

    Π‘Π»ΡƒΠΆΠΈΡ‚Π΅Π» Π½Π° Red Hat прСдстави систСмата Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Goals. ИзданиС Π½Π° GNU Make 4.2

    Π’ Goals сС ΠΏΡ€Π΅Π΄Π»Π°Π³Π° Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π΅Π½ Π±Ρ€ΠΎΠΉ ΠΈΠΌΠ΅Π½ΡƒΠ²Π°Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ. НапримСр, ΠΌΠΎΠΆΠ΅ ΠΎΡ‚Π΄Π΅Π»Π½ΠΎ Π΄Π° сС ΠΈΠ·Π²Π»Π΅Ρ‡Π΅ ΠΎΡ‚ ΠΈΠΌΠ΅Ρ‚ΠΎ характСристиката Π½Π° Ρ„Π°ΠΉΠ» Π·Π° отстраняванС Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ:

    Π‘Π»ΡƒΠΆΠΈΡ‚Π΅Π» Π½Π° Red Hat прСдстави систСмата Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Goals. ИзданиС Π½Π° GNU Make 4.2
  • ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ с взаимодСйствиСто със shell-ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°. НапримСр, нСобходимостта ΠΎΡ‚ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° Π΅ΠΊΡ€Π°Π½ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΈ Π² ΠΈΠΌΠ΅Π½Π°Ρ‚Π° Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ, Ρ€Π°Π·Ρ…ΠΎΠ΄ Π½Π° рСсурси ΠΏΡ€ΠΈ стартиранС Π½Π° ΠΎΡ‚Π΄Π΅Π»Π΅Π½ shell-ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Π·Π° изпълнСниС Π½Π° всяка ΠΊΠΎΠΌΠ°Π½Π΄Π°, Π΄Π²ΠΎΠΉΠ½ΠΎ Ρ‚ΡŠΠ»ΠΊΡƒΠ²Π°Π½Π΅ Π½Π° символа β€ž$β€œ (ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° сС ΠΊΠ°ΠΊΡ‚ΠΎ Π² shell, Ρ‚Π°ΠΊΠ° ΠΈ Π² make), ΠΎΡ‚Ρ‡ΠΈΡ‚Π°Π½Π΅ Π½Π° ΠΎΡ‚ΡΡ‚ΡŠΠΏΠΈΡ‚Π΅.

    ΠŸΠΎΡΠΎΡ‡Π΅Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ сС Ρ€Π΅ΡˆΠ°Π²Π°Ρ‚ Π² Goals, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ символа Β«%Β» вмСсто Β«$Β» Π·Π° сборочнитС ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ (освСн Β«$Β» Π·Π° shell), ΠΈ Ρ‡Ρ€Π΅Π· ΠΏΡ€ΠΈΠ»Π°Π³Π°Π½Π΅ Π½Π° парсСра LALR(1), ΠΊΠΎΠΉΡ‚ΠΎ изисква ΠΎΠ±Ρ€Π°ΠΌΡ‡Π²Π°Π½Π΅ Π½Π° ΠΏΡŠΡ‚ΠΈΡ‰Π° ΠΈ ΠΈΠΌΠ΅Π½Π° Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ с ΠΊΠ°Π²ΠΈΡ‡ΠΊΠΈ ΠΈ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° Π±Π»ΠΎΠΊΠΎΠ²Π΅ с ΠΊΠΎΠ΄ Π² Ρ„ΠΈΠ³ΡƒΡ€Π½ΠΈ скобки. ЦСлият Π±Π»ΠΎΠΊ сС изпълнява Π² Π΅Π΄ΠΈΠ½ СкзСмпляр Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½Π°Ρ‚Π° ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ°, Π° Π²ΡŠΡ‚Ρ€Π΅ Π² Π±Π»ΠΎΠΊΠ° Π΅ допустимо ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄Π°, Π±Π΅Π· ΠΏΡ€ΠΈΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ към спСциални ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΈ.

    Π‘Π΅ΡˆΠ΅:
    target: foo.o bar.o
    ${CC} ${CFLAGS} $< -o $@

    Π‘Ρ‚Π°Π»ΠΎ:
    Β«targetΒ»: Β«foo.oΒ», Β«bar.oΒ» {
    LAGS %< -o %@
    }

Π”Ρ€ΡƒΠ³ΠΈ особСности Π½Π° Goals:

  • ΠžΠΏΡ†ΠΈΠΎΠ½Π°Π»Π½Π°Ρ‚Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ ΠΈΠΌΠ΅Π½Π° ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ:

    goal all = : Β«targetΒ»

    goal link =
    Β«targetΒ»: Β«foo.oΒ», Β«bar.oΒ» { … }

    goal compile (name) =
    Β«%name.oΒ»: Β«%name.cΒ», Β«dep.hΒ» { LAGS -c $^ -o $@ }

  • Π”Π²Π° Ρ€Π΅ΠΆΠΈΠΌΠ° Π½Π° стартиранС: Ρ€Π΅ΠΆΠΈΠΌ make Π·Π° ΡΡŠΠΏΠΎΡΡ‚Π°Π²ΡΠ½Π΅ Π½Π° сборочни Ρ†Π΅Π»ΠΈ с ΠΈΠΌΠ΅Π½Π° Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ„Π°ΠΉΠ»ΡŠΡ‚ Β«foo.oΒ» ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π° Π½Π° Ρ†Π΅Π»Ρ‚Π° Β«%name.oΒ»), ΠΈ Ρ€Π΅ΠΆΠΈΠΌ Π½Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ стартиранС Π½Π° компилация:

    goal all = : link

    goal link =
    Β«targetΒ»: Β«foo.oΒ», compile (Β«barΒ») { … }

    goal compile (name) =
    Β«%name.oΒ»: Β«%name.cΒ», Β«dep.hΒ» { LAGS -c $^ -o $@ }

  • Π’Π°ΠΊΡ‚ΠΈΠΊΠ°Ρ‚Π° Π½Π° сглобяванС сС опрСдСля ΠΎΡ‚ спСциални ΠΏΡ€Π°Π²ΠΈΠ»Π°, с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС установи нСобходимостта ΠΎΡ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ сглобяванС Π½Π° Ρ†Π΅Π»Ρ‚Π° Π·Π° сглобяванС. Ако сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° ΠΎΠ±Π²ΡŠΡ€Π·Π²Π°Π½Π΅ с Π½Π°Π»ΠΈΡ‡ΠΈΠ΅Ρ‚ΠΎ Π½Π° Ρ„Π°ΠΉΠ», Ρ‚ΠΎΠ²Π° сС опрСдСля ясно Ρ‡Ρ€Π΅Π· ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ ("target" Π·Π° ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»ΠΎΡ‚ΠΎ ΠΈ *file("target") Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ„Π°ΠΉΠ»Π°).

    Β«targetΒ»: Β«foo.oΒ», Β«bar.oΒ» { … }

    *file("target") : *file("foo.o"), *file("bar.o") { … }

  • Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡŠΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° опрСдСля ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΈ Π·Π° Ρ‚Π°ΠΊΡ‚ΠΈΠΊΠΈΡ‚Π΅ Π·Π° сглобяванС. ΠœΠ°Ρ€ΠΊΠ΅Ρ€ΡŠΡ‚ "*file" Π΅ Π·Π°Π΄Π°Π΄Π΅Π½ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ (@{…} ΡƒΠΊΠ°Π·Π²Π° Π½Π° подавянС Π½Π° ΠΈΠ·Ρ…ΠΎΠ΄Π°, Π° "exit 99" сигнализира Π·Π° нСобходимост ΠΎΡ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ сглобяванС):

    tactic *file (filename) = @{
    test -f %filename || exit 99
    for f in %

    Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster