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

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

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

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

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

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

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

    Red Hat қызметкері Goals құрастыру жүйесін ұсынды. GNU Make 4.2 шығарылымы
  • Қабық интерпретаторымен өзара әрекеттесу мәселелері. Мысалы, файл және каталог атауларындағы бос орындардың кетуін басқару қажеттілігі, әрбір команда үшін бөлек қабық интерпретаторын іске қосудың ресурстық шығындары, "$" символының қос интерпретациясы (қабықта да, жасауда да қолданылады) және шегініс.

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

    Бұл:
    target: 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", компиляция ("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

DDoS қорғауы бар сайттар үшін сенімді хостинг, VPS VDS серверлерін сатып алыңыз 🔥 DDoS қорғанысы, VPS VDS серверлері бар сенімді веб-сайт хостингін сатып алыңыз | ProHoster