Red Hat සේවකයෙක් ඉලක්ක එකලස් කිරීමේ පද්ධතිය ඉදිරිපත් කළේය. GNU Make 4.2 නිකුත් කිරීම

රිචඩ් ඩබ්ලිව් එම් ජෝන්ස්, කර්තෘ libguestfs, Red Hat හි වැඩ, හඳුන්වා දී ඇත නව එකලස් කිරීමේ උපයෝගීතාව ඉලක්ක, ස්ක්‍රිප්ට් වල සමස්ත සරල බව සහ අවබෝධය පවත්වා ගනිමින් සෑදීමේ උපයෝගීතාවයේ ඇති අඩුපාඩු සහ ගැටළු ඉවත් කිරීම අරමුණු කර ගෙන ඇත. Make utility 1976 දී නිර්මාණය කරන ලද අතර පොදු සංකල්පය වෙනස් නොකර මෙම අඩුපාඩු ඉවත් කිරීම සඳහා සංකල්පීය අඩුපාඩු ගණනාවක් ඇත.
ඉලක්ක මූල කේතය විසින් බෙදා හරිනු ලැබේ GPLv2+ යටතේ බලපත්‍ර ලබා ඇත.

විසඳිය යුතු ගැටළු:

  • එක් පරායත්ත විභේදන උපක්‍රමයක් සඳහා පමණක් සහාය - “ඉලක්ක ගොනුව අස්ථානගත වී ඇත්නම් හෝ පරායත්තතාවයෙන් එකකට වඩා පැරණි නම් එකලස් කිරීමේ උපදෙස් ක්‍රියාත්මක වේ.” URL එකක් තිබේද යන්න පරීක්ෂා කිරීම, ඕනෑම ගොනුවක් සමඟ වෙනස් කිරීමේ වේලාවන් සංසන්දනය කිරීම, පැකේජ ගොඩනැගීම ඇගයීම වැනි වෙනත් උපක්‍රම ක්‍රියාත්මක කිරීමට ඉලක්ක සැලසුම් කරයි. කොජි, චෙක්සම් සංසන්දනය කිරීම, පරීක්ෂණ වරණයෙන් මඟ හැරීම සමඟ පරීක්ෂණ අවස්ථා ධාවනය කිරීම.
  • ගොඩනැගීමේ ඉලක්ක සැකසීමේදී, make විසින් ගොනු සහ රීති නාමයන් වෙන් නොකරන අතර, එහි ප්‍රතිඵලයක් ලෙස, රීතියක් ක්‍රියාත්මක කරන විට, එය නිර්මාණය කළ බව කියන ගොනුව සත්‍ය වශයෙන්ම සාදනු ඇත්දැයි පරීක්ෂා කිරීමක් නොමැත. උදාහරණයක් ලෙස, ඔබට පරීක්ෂණ සමඟ ස්ක්‍රිප්ට් ධාවනය කරන "ටෙස්ට්" නම් රීතියක් තිබේ නම්, "ටෙස්ට්" නම් ගොනුවක් අහම්බෙන් සාදනු ලැබුවහොත්, පරීක්ෂණ තවදුරටත් කැඳවනු නොලැබේ, මන්ද ඉලක්කය ගොඩනගා ඇති බවත් අවශ්‍ය නොවන බවත් Make සලකනු ඇත. ඕනෑම ක්‍රියාවක් (සැකීමේ ගැටලුව විසඳීම සඳහා, ඔබට “.PHONY: test” විධානය නියම කළ හැක). ඉලක්ක ගොනු සහ රීති නම් පැහැදිලිවම වෙන් කරයි.

    Red Hat සේවකයෙක් ඉලක්ක එකලස් කිරීමේ පද්ධතිය ඉදිරිපත් කළේය. GNU Make 4.2 නිකුත් කිරීම

  • එකලස් කිරීමේ උපදෙස් සඳහා එක් පරාමිතියක් පමණක් සැපයීමේ ගැටලුව.

    Red Hat සේවකයෙක් ඉලක්ක එකලස් කිරීමේ පද්ධතිය ඉදිරිපත් කළේය. GNU Make 4.2 නිකුත් කිරීම

    ඉලක්ක ඔබට නම් කරන ලද පරාමිතිවල අත්තනෝමතික සංඛ්යාවක් භාවිතා කිරීමට ඉඩ සලසයි. උදාහරණයක් ලෙස, ඔබට නමෙන් දෝශ නිරාකරණ ගොනුවක ලකුණ වෙන වෙනම උකහා ගත හැකිය:

    Red Hat සේවකයෙක් ඉලක්ක එකලස් කිරීමේ පද්ධතිය ඉදිරිපත් කළේය. GNU Make 4.2 නිකුත් කිරීම

  • ෂෙල් පරිවර්තකය සමඟ අන්තර්ක්‍රියා කිරීමේ ගැටළු. උදාහරණයක් ලෙස, ගොනු සහ නාමාවලි නාමවල ඇති ඉඩ ගැලවී යාම පාලනය කිරීමේ අවශ්‍යතාවය, එක් එක් විධානය ක්‍රියාත්මක කිරීමේදී වෙනම කවච පරිවර්තකයක් දියත් කිරීමේදී සම්පත් නාස්තිය, “$” අක්ෂරයේ ද්විත්ව අර්ථ නිරූපණය (ෂෙල් සහ සෑදීම යන දෙකෙහිම භාවිතා වේ), indentations සැලකිල්ලට ගනිමින්.

    එකලස් කිරීමේ විචල්‍යයන් සඳහා “$” වෙනුවට “%” සංකේතය භාවිතා කිරීමෙන් මෙම ගැටලු ඉලක්ක තුළ විසඳනු ලැබේ (“$” කවචය සඳහා පමණක් ඉතිරි වේ), විග්‍රහයක් භාවිතා කරයි. 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", compile ("bar") { ...}

    ඉලක්ක සම්පාදනය (නම) =
    "%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@}

  • එකලස් කිරීමේ උපක්‍රම තීරණය කරනු ලබන්නේ එකලස් කිරීමේ ඉලක්කයක් නැවත එකලස් කිරීමේ අවශ්‍යතාවය තීරණය කිරීම සඳහා භාවිතා කළ හැකි විශේෂ නීති මගිනි. ගොනුවක් තිබීම සඳහා සබැඳියක් සාදා ඇත්නම්, මෙය පැහැදිලිවම අනුරූප ලකුණ හරහා තීරණය වේ (රීති නාමය සඳහා "ඉලක්කය" සහ ගොනුව පරීක්ෂා කිරීම සඳහා * ගොනුව ("ඉලක්කය")).

    "ඉලක්කය" : "foo.o", "bar.o" { ...}

    *ගොනුව("ඉලක්කය") : *ගොනුව("foo.o"), *file("bar.o") { ...}

  • සංවර්ධකයාට එකලස් කිරීමේ උපක්‍රමවල අත්තනෝමතික ගුණාංග නිර්වචනය කළ හැකිය. "*ගොනුව" ධජය පෙරනිමියෙන් නිර්වචනය කර ඇත (@{...} මඟින් ප්‍රතිදානය මැඩපැවැත්වීම පෙන්නුම් කරයි, සහ "පිටවීම 99" නැවත ගොඩනැගීමේ අවශ්‍යතාවය සංඥා කරයි):

    උපක්‍රම *ගොනුව (ගොනු නාමය) = @{
    test -f %ගොනු නාමය || පිටවීම 99
    % හි f සඳහා

    මූලාශ්රය: opennet.ru

අදහස් එක් කරන්න