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

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

Π Π°Π·Ρ€Π΅ΡˆΠΈΡ‚Π΅Π»Π½ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ:

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

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

  • ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌ с прСдоставянСто само Π½Π° Π΅Π΄ΠΈΠ½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ Π·Π° инструкциитС Π·Π° сглобяванС.

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

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

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

  • ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ ΠΏΡ€ΠΈ взаимодСйствиСто с ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Π½Π° ΠΎΠ±Π²ΠΈΠ²ΠΊΠ°Ρ‚Π°. НапримСр нСобходимостта Π΄Π° сС ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π° Π΅ΠΊΡ€Π°Π½ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΈ Π² ΠΈΠΌΠ΅Π½Π°Ρ‚Π° Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅ ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈΡ‚Π΅, Π·Π°Π³ΡƒΠ±Π°Ρ‚Π° Π½Π° рСсурси Π·Π° стартиранС Π½Π° ΠΎΡ‚Π΄Π΅Π»Π΅Π½ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Π½Π° ΠΎΠ±Π²ΠΈΠ²ΠΊΠ°Ρ‚Π° ΠΏΡ€ΠΈ изпълнСниС Π½Π° всяка ΠΊΠΎΠΌΠ°Π½Π΄Π°, Π΄Π²ΠΎΠΉΠ½Π°Ρ‚Π° интСрпрСтация Π½Π° Π·Π½Π°ΠΊΠ° "$" (ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ ΠΊΠ°ΠΊΡ‚ΠΎ Π² ΠΎΠ±Π²ΠΈΠ²ΠΊΠ°Ρ‚Π°, Ρ‚Π°ΠΊΠ° ΠΈ Π² make), ΠΊΠ°Ρ‚ΠΎ сС Π²Π·Π΅ΠΌΠ°Ρ‚ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ Π²Π΄Π»ΡŠΠ±Π½Π°Ρ‚ΠΈΠ½ΠΈΡ‚Π΅.

    Π’Π΅Π·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ сС Ρ€Π΅ΡˆΠ°Π²Π°Ρ‚ Π² Goals Ρ‡Ρ€Π΅Π· ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° символа β€ž%β€œ вмСсто β€ž$β€œ Π·Π° асСмблиращи ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ (β€ž$β€œ остава само Π·Π° ΠΎΠ±Π²ΠΈΠ²ΠΊΠ°Ρ‚Π°), ΠΊΠ°Ρ‚ΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ LALR (1), ΠΊΠΎΠ΅Ρ‚ΠΎ изисква Π΄Π° Π·Π°Π³Ρ€Π°Π΄ΠΈΡ‚Π΅ ΠΏΡŠΡ‚Π΅ΠΊΠΈΡ‚Π΅ ΠΈ ΠΈΠΌΠ΅Π½Π°Ρ‚Π° Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅ с ΠΊΠ°Π²ΠΈΡ‡ΠΊΠΈ ΠΈ Π΄Π° ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Ρ‚Π΅ ΠΊΠΎΠ΄ΠΎΠ²ΠΈΡ‚Π΅ Π±Π»ΠΎΠΊΠΎΠ²Π΅ с Ρ„ΠΈΠ³ΡƒΡ€Π½ΠΈ скоби. ЦСлият ΠΊΠΎΠΌΠ°Π½Π΄Π΅Π½ Π±Π»ΠΎΠΊ сС стартира Π² Π΅Π΄Π½ΠΎ ΠΊΠΎΠΏΠΈΠ΅ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½Π°Ρ‚Π° ΠΎΠ±Π²ΠΈΠ²ΠΊΠ° ΠΈ Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄ Π²ΡŠΡ‚Ρ€Π΅ Π² Π±Π»ΠΎΠΊΠ°, Π±Π΅Π· ΠΏΡ€Π΅ΠΏΡ€Π°Ρ‚ΠΊΠ° към спСциални ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΈ.

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

    Π‘Ρ‚Π°Π½Π°:
    "target": "foo.o", "bar.o" {
    %CC %CFLAGS %< -o %@
    }

Π”Ρ€ΡƒΠ³ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° Goals:

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

    Ρ†Π΅Π» всички = : "Ρ†Π΅Π»"

    Ρ†Π΅Π» Π²Ρ€ΡŠΠ·ΠΊΠ° =
    "target": "foo.o", "bar.o" { ... }

    Ρ†Π΅Π» ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅ (ΠΈΠΌΠ΅) =
    "%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ }

  • Π”Π²Π° Ρ€Π΅ΠΆΠΈΠΌΠ° Π½Π° стартиранС: Ρ€Π΅ΠΆΠΈΠΌ Π½Π° създаванС Π·Π° ΡΡŠΠΏΠΎΡΡ‚Π°Π²ΡΠ½Π΅ Π½Π° Ρ†Π΅Π»ΠΈ Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅ с ΠΈΠΌΠ΅Π½Π° Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ (Π½Π°ΠΏΡ€. Ρ„Π°ΠΉΠ»ΡŠΡ‚ "foo.o" съвпада с Ρ†Π΅Π» "%name.o") ΠΈ Ρ€Π΅ΠΆΠΈΠΌ Π½Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅:

    Π³ΠΎΠ» всички = : Π²Ρ€ΡŠΠ·ΠΊΠ°

    Ρ†Π΅Π» Π²Ρ€ΡŠΠ·ΠΊΠ° =
    "target": "foo.o", ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅ ("bar") { ... }

    Ρ†Π΅Π» ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅ (ΠΈΠΌΠ΅) =
    "%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ }

  • Π’Π°ΠΊΡ‚ΠΈΠΊΠ°Ρ‚Π° Π½Π° сглобяванС сС опрСдСля ΠΎΡ‚ спСциални ΠΏΡ€Π°Π²ΠΈΠ»Π°, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π·Π° опрСдСлянС Π½Π° нСобходимостта ΠΎΡ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ сглобяванС Π½Π° мишСна Π·Π° сглобяванС. Ако сС Π½Π°ΠΏΡ€Π°Π²ΠΈ Π²Ρ€ΡŠΠ·ΠΊΠ° към Π½Π°Π»ΠΈΡ‡ΠΈΠ΅Ρ‚ΠΎ Π½Π° Ρ„Π°ΠΉΠ», Ρ‚ΠΎ Ρ‚ΠΎΠ²Π° сС опрСдСля ΠΈΠ·Ρ€ΠΈΡ‡Π½ΠΎ Ρ‡Ρ€Π΅Π· ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ Π·Π½Π°ΠΊ (β€žtargetβ€œ Π·Π° ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»ΠΎΡ‚ΠΎ ΠΈ *file (β€žtargetβ€œ) Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ„Π°ΠΉΠ»Π°).

    "target": "foo.o", "bar.o" { ... }

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

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

    Ρ‚Π°ΠΊΡ‚ΠΈΠΊΠ° *Ρ„Π°ΠΉΠ» (ΠΈΠΌΠ΅ Π½Π° Ρ„Π°ΠΉΠ») = @{
    тСст -f % ΠΈΠΌΠ΅ Π½Π° Ρ„Π°ΠΉΠ» || ΠΈΠ·Ρ…ΠΎΠ΄ 99
    Π·Π° f Π² %

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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€