ሪቻርድ ደብሊው.ኤም. ጆንስ፣ ደራሲ በሬድ ሃት ውስጥ መሥራት፣ አዲስ የመገጣጠም መገልገያ የስክሪፕቶችን አጠቃላይ ቀላልነት እና ግልጽነት በመጠበቅ የሜክ መገልገያውን ጉድለቶች እና ችግሮች ለማስወገድ ያለመ። የሜክ መገልገያው በ1976 የተነደፈ ሲሆን በርካታ የፅንሰ-ሀሳባዊ ጉድለቶች አሉት። ግቦች አጠቃላይ ፅንሰ-ሀሳቡን ሳይቀይሩ እነዚህን ጉድለቶች ለመፍታት ያለሙ ናቸው።
የግብ ምንጭ ኮድ በ GPLv2+ ስር ፈቃድ ያለው።
:
- ለአንድ የጥገኝነት መፍትሄ ዘዴ ብቻ ድጋፍ—"የኢላማው ፋይል ከጥገኛዎቹ አንዱ ከጠፋ ወይም የቆየ ከሆነ የግንባታ መመሪያ ይሰራል።" ግቦች እንደ የዩአርኤል መኖርን ማረጋገጥ፣ የማሻሻያ ጊዜዎችን ከማንኛውም ፋይል ጋር ማወዳደር እና የጥቅሉን ግንባታ መገምገም ያሉ ሌሎች ዘዴዎችን ለመተግበር አቅደዋል። የቼክሰም ንጽጽር፣ የፈተና ስብስቦችን ከተመረጡ የመዝለል ፈተናዎች ጋር ማስኬድ።
- የግንባታ ኢላማዎችን ሲያስኬዱ፣ make በፋይሎች እና በደንብ ስሞች መካከል ያለውን ልዩነት አያሳይም፣ በዚህም ምክንያት፣ እፈጥራለሁ የሚለው ፋይል ደንቡ ሲሄድ በትክክል እንደሚፈጠር ለማረጋገጥ ምንም አይነት ቼክ የለም። ለምሳሌ፣ "test" የሚባል ደንብ የሙከራ ስክሪፕቶችን የሚያሄድ ከሆነ እና "test" የሚባል ፋይል በአጋጣሚ ከተፈጠረ፣ ሙከራዎቹ መጠራት ያቆማሉ፣ ምክንያቱም make the target is built እና ምንም አይነት እርምጃ የማይፈልግ ስለሆነ። (በዚህ ዙሪያ ለመስራት፣ make ውስጥ ያለውን ".PHONY:test" መመሪያ መግለጽ ይችላሉ።) ግቦች በፋይሎች እና በደንብ ስሞች መካከል በግልጽ ይለያል።

- ለመገጣጠሚያ መመሪያዎች አንድ መለኪያ ብቻ በማቅረብ ላይ ችግር።

ግቦች ማንኛውንም የተሰየሙ መለኪያዎችን ቁጥር መጠቀም ይፈቅዳሉ። ለምሳሌ፣ የስህተት ፋይል ባንዲራውን ከስሙ ለብቻው ማውጣት ይችላሉ፡

- ከሼል ተርጓሚ ጋር መስተጋብር የሚፈጥሩ ችግሮች። ለምሳሌ፣ በፋይል እና በማውጫ ስሞች ውስጥ የቦታዎች መሸሽ መቆጣጠር አስፈላጊነት፣ ለእያንዳንዱ ትዕዛዝ የተለየ የሼል ተርጓሚ የማስጀመር የሀብት ወጪ፣ የ"$" ምልክት ድርብ ትርጓሜ (በሼል እና በሜክ ውስጥ ጥቅም ላይ የዋለ) እና ገብ።
የተጠቀሱት ችግሮች በግቦች ውስጥ የሚፈቱት ለስብሰባ ተለዋዋጮች ("$" የሚቀረው ለቅርፊቱ ብቻ ነው) "%" የሚለውን ምልክት በመጠቀም ነው፣ ተንታኝን በመጠቀም። , ይህም ዱካዎችን እና የፋይል ስሞችን መጥቀስ እና የኮድ ብሎኮችን በተጠማዘዘ ማሰሪያዎች መለየትን ይጠይቃል። መላው የትዕዛዝ ብሎክ የሚሄደው በአንድ የትዕዛዝ ቅርፊት ውስጥ ሲሆን በብሎኩ ውስጥ፣ በልዩ ክፍተቶች ሳይታሰር የዘፈቀደ የኮድ ቅርጸት ይፈቀዳል።
ነበር፡
ዒላማ፡ foo.o bar.o
${CC} ${CFLAGS} $< -o $@ሆነ፡-
"target": "foo.o", "bar.o" {
%CC %CFLAGS %< -o %@
}
ሌሎች የዓላማ ባህሪያት፡
- ብጁ ስሞችን እና መለኪያዎችን ለመግለጽ አማራጭ ድጋፍ፡
ግብ ሁሉም = : "ዒላማ"
የግብ አገናኝ =
"target" : "foo.o", "bar.o" { ... }የግብ ማጠናቀሪያ (ስም) =
"%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ } - ሁለት የማስጀመሪያ ሁነታዎች፡ የግንባታ ኢላማዎችን ከፋይል ስሞች ጋር ለማዛመድ ሁነታ ይፍጠሩ (ለምሳሌ ፋይል "foo.o" ከዒላማ "%name.o" ጋር ይዛመዳል)፣ እና ቀጥተኛ የማጠናቀር ሁነታ፡
ግብ ሁሉም = : አገናኝ
የግብ አገናኝ =
"target" : "foo.o", compile ("bar") { ... }የግብ ማጠናቀሪያ (ስም) =
"%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ } - የግንባታ ስልቶች የሚገለጹት የግንባታ ኢላማ እንደገና መገንባት እንዳለበት ወይም እንደሌለበት ለመወሰን በሚረዱ ልዩ ህጎች ነው። የፋይል መኖር አስፈላጊ ከሆነ፣ ይህ በግልጽ የሚገለጸው ተገቢውን ባንዲራ ("ለደንብ ስም" እና ለፋይል ፍተሻ *ፋይል ("ታርጌት") በመጠቀም ነው።
"target" : "foo.o", "bar.o" { ... }
*ፋይል("target") : *ፋይል("foo.o"), *ፋይል("bar.o") { ... }
- ገንቢው ብጁ የግንባታ ስትራቴጂ ባንዲራዎችን መግለጽ ይችላል። የ"*ፋይል" ባንዲራ በነባሪነት (@{…} የውጤት መጨናነቅን ያመለክታል፣ እና "ውጣ 99" እንደገና መገንባት አስፈላጊ መሆኑን ያሳያል፡
ታክቲክ *ፋይል (የፋይል ስም) = @{
የሙከራ -f %የፋይል ስም || መውጫ 99
ለ f በ%ምንጭ: opennet.ru



