Ричард В.М. Джонс, автор Red Hat компаниясында жұмыс істейді, жаңа құрастыру утилитасы , сценарийлердің жалпы қарапайымдылығы мен анықтығын сақтай отырып, make утилитасы кемшіліктері мен мәселелерін жоюға бағытталған. make утилитасы 1976 жылы жасалған және бірқатар тұжырымдамалық кемшіліктерге ие. Мақсаттар жалпы тұжырымдаманы өзгертпей, осы кемшіліктерді жоюға бағытталған.
Мақсаттардың бастапқы коды GPLv2+ бойынша лицензияланған.
:
- Тек бір ғана тәуелділікті шешу тактикасын қолдау - "егер мақсатты файл жоқ болса немесе тәуелділіктердің бірі ескі болса, құрастыру нұсқаулығы орындалады." Goals басқа тактикаларды, мысалы, URL мекенжайының бар-жоғын тексеру, өзгерту уақытын кез келген файлмен салыстыру және пакеттің құрастырылуын бағалауды енгізуді жоспарлайды. , бақылау қосындыларын салыстыру, тесттерді таңдамалы түрде өткізіп жіберу арқылы тест жинақтарын іске қосу.
- Құрастыру мақсаттарын өңдеген кезде, make файлдар мен ереже атауларын ажыратпайды, нәтижесінде ереже іске қосылған кезде ол жасаймын деп мәлімдеген файлдың шынымен жасалатынына көз жеткізу үшін ешқандай тексеру болмайды. Мысалы, егер "test" деп аталатын ереже сынақ скрипттерін іске қосса және "test" деп аталатын файл кездейсоқ жасалса, тесттер шақырылуын тоқтатады, себебі make мақсаттың жасалғанын және ешқандай әрекетті қажет етпейтінін болжайды. (Мұны айналып өту үшін make ішінде ".PHONY:test" директивасын көрсетуге болады.) Goals файлдар мен ереже атауларын анық ажыратады.

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

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

- Қабық интерпретаторымен өзара әрекеттесу мәселелері. Мысалы, файл және каталог атауларындағы бос орындардың кетуін басқару қажеттілігі, әрбір команда үшін бөлек қабық интерпретаторын іске қосудың ресурстық шығындары, "$" символының қос интерпретациясы (қабықта да, жасауда да қолданылады) және шегініс.
Аталған мәселелер Мақсаттар бөлімінде ассемблер айнымалылары үшін «$» орнына «%» символын қолдану арқылы («$» тек қабық үшін қалады), парсерді қолдану арқылы шешіледі. , бұл жолдар мен файл атауларын дәйексөзбен келтіруді және код блоктарын бұйра жақшалармен шектеуді талап етеді. Бүкіл командалық блок командалық қабықтың бір данасында орындалады және блок ішінде арнайы бос орындармен шектелмей, кез келген кодты пішімдеуге рұқсат етіледі.
Бұл:
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



