የሬድ ኮፍያ ሰራተኛ የጎል ማሰባሰብያ ዘዴን አቅርቧል። የGNU Make 4.2 መልቀቅ

ሪቻርድ WM ጆንስ, ደራሲ libguestfsበቀይ ኮፍያ በመስራት ላይ አስተዋውቋል አዲስ የመሰብሰቢያ መገልገያ ግቦችየስክሪፕቶችን አጠቃላይ ቀላልነት እና መረዳትን በመጠበቅ ላይ ጉድለቶችን እና ችግሮችን ለማስወገድ ያለመ ነው። የማምረቻ መገልገያው በ 1976 የተነደፈ እና በርካታ የፅንሰ-ሀሳብ ጉድለቶች አሉት ፣ ግቦች አጠቃላይ ጽንሰ-ሀሳቡን ሳይቀይሩ እነዚህን ድክመቶች ለማስወገድ አቅዷል።
የግብ ምንጭ ኮድ የተሰራጨው በ በ GPLv2+ ስር ፈቃድ ያለው።

የሚፈቱ ችግሮች:

  • ለአንድ ጥገኝነት አፈታት ስልት ብቻ ድጋፍ - "የስብሰባው መመሪያ የሚከናወነው የታለመው ፋይል ከጠፋ ወይም ከጥገኛዎቹ ከአንዱ በላይ ከሆነ ነው።" ግቦች ሌሎች ስልቶችን ተግባራዊ ለማድረግ አቅደዋል፣ ለምሳሌ URL መኖሩን ማረጋገጥ፣ የማሻሻያ ጊዜዎችን ከማንኛውም ፋይል ጋር ማወዳደር፣ የጥቅል ግንባታውን መገምገም ኮጂ፣ የቼኮችን ማነፃፀር ፣ የፈተና ጉዳዮችን በምርጫ መዝለል።
  • የግንባታ ኢላማዎችን በሚሰራበት ጊዜ ፋይሎችን አይለያዩም እና ስሞችን አይመሩም ፣ እና በውጤቱም ፣ ደንብን በሚያስኬዱበት ጊዜ ተፈጠረ ያለው ፋይል በትክክል እንደሚፈጠር ምንም ማረጋገጫ የለም። ለምሳሌ ስክሪፕቶችን ከፈተናዎች ጋር የሚያሄድ "ሙከራ" የሚባል ህግ ካለህ "ሙከራ" የሚባል ፋይል በአጋጣሚ ተፈጥሯል ከዚያም ፈተናዎቹ አይጠሩም ምክንያቱም ዒላማው የተገነባ እና የማይፈልግ መሆኑን ስለሚያስብ ፈተናዎቹ አይጠሩም. ማንኛውንም እርምጃ (በተፈጠረው ችግር ዙሪያ ለመስራት የ ". PHONY: test" መመሪያን መግለጽ ይችላሉ). ግቦች ፋይሎችን እና የደንብ ስሞችን በግልፅ ይለያሉ።

    የሬድ ኮፍያ ሰራተኛ የጎል ማሰባሰብያ ዘዴን አቅርቧል። የGNU Make 4.2 መልቀቅ

  • ለስብሰባ መመሪያዎች አንድ መለኪያ ብቻ በማቅረብ ላይ ችግር.

    የሬድ ኮፍያ ሰራተኛ የጎል ማሰባሰብያ ዘዴን አቅርቧል። የGNU Make 4.2 መልቀቅ

    ግቦች የዘፈቀደ ቁጥር የተሰየሙ መለኪያዎችን እንዲጠቀሙ ይፈቅድልዎታል። ለምሳሌ፣ የስህተት ማረሚያ ፋይል ምልክትን ከስሙ ለየብቻ ማውጣት ይችላሉ፡-

    የሬድ ኮፍያ ሰራተኛ የጎል ማሰባሰብያ ዘዴን አቅርቧል። የGNU Make 4.2 መልቀቅ

  • ከሼል አስተርጓሚ ጋር መስተጋብር ላይ ችግሮች. ለምሳሌ በፋይል እና በማውጫ ስሞች ውስጥ ያሉ ቦታዎችን ማምለጥ የመቆጣጠር አስፈላጊነት ፣ እያንዳንዱን ትዕዛዝ በሚፈጽምበት ጊዜ የተለየ የሼል አስተርጓሚ ለማስጀመር የሀብት ብክነት ፣ የ‹$› ምልክት ድርብ ትርጓሜ (በሼል እና በሠራው ውስጥ ጥቅም ላይ ይውላል) ፣ ግቤቶችን ግምት ውስጥ በማስገባት.

    እነዚህ ችግሮች በ Goals ውስጥ የሚፈቱት የ"%" ምልክትን በመጠቀም ከ"$" ይልቅ የመሰብሰቢያ ተለዋዋጮች ("$" ለሼል ብቻ ነው የሚቀረው)፣ ተንታኝ በመጠቀም ነው። LALR(1), ዱካዎችን ከበቡ እና ስሞችን በጥቅሶች እና በኮድ ብሎኮች በጥምጥም ቅንፎች ማድመቅ ይጠይቃል። ሙሉው የትዕዛዝ እገዳ በአንድ የትእዛዝ ሼል ውስጥ ተጀምሯል ፣ እና በብሎክ ውስጥ ፣ ልዩ ቦታዎችን ሳይጠቅስ የዘፈቀደ ኮድ ቅርጸት ይፈቀዳል።

    ነበር፡
    ኢላማ፡ foo.o bar.o
    ${CC} ${CFLAGS} $< -o $@

    ሆነ፡-
    "ዒላማ": "foo.o", "bar.o" {
    %CC %CFLAGS %<-o %@
    }

ሌሎች የግብ ባህሪያት፡-

  • የዘፈቀደ ስሞችን እና መለኪያዎችን ለመወሰን አማራጭ ድጋፍ፡

    ግብ ሁሉ = : "ዒላማ"

    የግብ አገናኝ =
    "ዒላማ": "foo.o", "bar.o" {... }

    ግብ ማጠናቀር (ስም) =
    "%name.o" : "%name.c", "dep.h" {%CC %CFLAGS -c $^ -o $@}

  • ሁለት የማስጀመሪያ ሁነታዎች፡ የግንባታ ኢላማዎችን ከፋይል ስሞች ጋር ለማዛመድ ሁነታን ፍጠር (ለምሳሌ ፋይል "foo.o" ከዒላማ "%name.o" ጋር ይዛመዳል) እና ቀጥታ የማጠናቀር ሁነታ፡

    ግብ ሁሉም = : አገናኝ

    የግብ አገናኝ =
    "ዒላማ" : "foo.o", ማጠናቀር ("ባር") {... }

    ግብ ማጠናቀር (ስም) =
    "%name.o" : "%name.c", "dep.h" {%CC %CFLAGS -c $^ -o $@}

  • የመሰብሰቢያ ዘዴዎች የሚወሰኑት የመሰብሰቢያ ዒላማውን እንደገና የመገጣጠም አስፈላጊነትን ለመወሰን በሚያስችሉ ልዩ ደንቦች ነው. የፋይል መኖር አገናኝ ከተሰራ ፣ ይህ በተዛማጅ ምልክት (“ዒላማ” ለደንቡ ስም እና * ፋይል (“ዒላማ”) ፋይሉን ለመፈተሽ) በግልፅ ይወሰናል።

    "ዒላማ": "foo.o", "bar.o" {... }

    * ፋይል ("ዒላማ"): * ፋይል ("foo.o"), * ፋይል ("bar.o") {... }

  • ገንቢው የዘፈቀደ የመሰብሰቢያ ዘዴዎችን ባህሪያት ሊገልጽ ይችላል። የ«*ፋይል» ባንዲራ በነባሪነት ይገለጻል (@{...} የውጤቱን መጨቆን ያሳያል፣ እና "መውጫ 99" የመልሶ ግንባታ አስፈላጊነትን ያሳያል)

    ዘዴ * ፋይል (የፋይል ስም) = @{
    ፈተና -f % የፋይል ስም || 99 ውጣ
    ለ f በ%

    ምንጭ: opennet.ru

አስተያየት ያክሉ