Red Hat қызметкері Goals құрастыру жүйесін ұсынды. GNU Make 4.2 шығарылымы

Ричард В.М. Джонс, автор libguestfs, Red Hat компаниясында жұмыс істеу, енгізілді жаңа құрастыру утилитасы мақсаттары, сценарийлердің жалпы қарапайымдылығы мен түсініктілігін сақтай отырып, жасау утилитасындағы кемшіліктер мен проблемаларды жоюға бағытталған. Make утилитасы 1976 жылы жасалған және бірқатар тұжырымдамалық кемшіліктері бар; Мақсаттар жалпы тұжырымдаманы өзгертпестен осы кемшіліктерді жоюды жоспарлайды.
Мақсаттардың бастапқы коды таралады GPLv2+ бойынша лицензияланған.

Ақаулы проблемалар:

  • Тек бір тәуелділікті шешу тактикасын қолдау – «құрастыру нұсқауы мақсатты файл жоқ болса немесе тәуелділіктердің бірінен ескірек болса орындалады». Мақсаттар URL мекенжайының бар-жоғын тексеру, өзгерту уақытын кез келген файлмен салыстыру, пакетті құрастыруды бағалау сияқты басқа тактикаларды жүзеге асыруды жоспарлайды. Кожи, бақылау сомасын салыстыру, тестілерді іріктеп өткізіп жіберу арқылы тест тапсырмаларын орындау.
  • Құрастыру мақсаттарын өңдеу кезінде make файлдар мен ереже атауларын бөлмейді және нәтижесінде ережені іске қосқан кезде ол жасалған деп мәлімдеген файлдың шын мәнінде жасалатынын тексермейді. Мысалы, егер сізде сынақтары бар сценарийлерді іске қосатын «test» деп аталатын ереже болса, «test» деп аталатын файл кездейсоқ жасалса, онда сынақтар енді шақырылмайды, өйткені make мақсатты құрастырылғанын және оны қажет етпейтінін қарастырады. кез келген әрекет (орындалған мәселені шешу үшін «.PHONY: сынақ» директивасын көрсетуге болады). Мақсаттар файлдар мен ереже атауларын анық бөледі.

    Red Hat қызметкері Goals құрастыру жүйесін ұсынды. GNU Make 4.2 шығарылымы

  • Құрастыру нұсқаулары үшін тек бір параметрді қамтамасыз ету мәселесі.

    Red Hat қызметкері Goals құрастыру жүйесін ұсынды. GNU Make 4.2 шығарылымы

    Мақсаттар аталған параметрлердің ерікті санын пайдалануға мүмкіндік береді. Мысалы, жөндеу файлының белгісін атаудан бөлек шығаруға болады:

    Red Hat қызметкері Goals құрастыру жүйесін ұсынды. GNU Make 4.2 шығарылымы

  • Қабық интерпретаторымен әрекеттесу проблемалары. Мысалы, файл және каталог атауларындағы бос орындардың қашуын бақылау қажеттілігі, әрбір пәрменді орындау кезінде жеке қабықша интерпретаторын іске қосу үшін ресурстарды ысырап ету, «$» таңбасының қосарланған интерпретациясы (қабық пен жасауда да қолданылады), шегіністерді ескере отырып.

    Бұл мәселелер Мақсаттарда құрастыру айнымалылары үшін «$» орнына «%» таңбасын қолдану арқылы («$» тек қабық үшін қалады), талдаушы арқылы шешіледі. LALR(1), ол жолдарды және файл атауларын тырнақшалармен қоршауды және бұйра жақшалармен код блоктарын бөлектеуді талап етеді. Бүкіл пәрмен блогы пәрмен қабығының бір данасында іске қосылады және блок ішінде арнайы бос орындарға сілтеме жасамай, еркін кодты пішімдеуге рұқсат етіледі.

    Бұл:
    мақсат: 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", құрастыру ("бар") { ... }

    мақсат құрастыру (аты) =
    "%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@ }

  • Құрастыру тактикасы құрастыру нысанасын қайта жинау қажеттілігін анықтау үшін пайдаланылуы мүмкін арнайы ережелермен анықталады. Егер файлдың бар-жоғына сілтеме жасалса, онда бұл сәйкес белгі арқылы анық анықталады («мақсат ереже атауы үшін және *файл («мақсат») файлды тексеру үшін).

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

    *файл("мақсат"): *файл("foo.o"), *файл("bar.o") { ...}

  • Әзірлеуші ​​құрастыру тактикасының ерікті атрибуттарын анықтай алады. "*файл" жалаушасы әдепкі бойынша анықталған (@{...} шығыстың басылуын көрсетеді, ал "exit 99" қайта құру қажеттілігін білдіреді):

    тактика *файл (файл аты) = @{
    test -f %файл аты || 99 шығыңыз
    f үшін %

    Ақпарат көзі: opennet.ru

пікір қалдыру