ПредишенСледващото

Цел, история, версии

Помощната програма грим е предназначен за автоматизиране на проекти за монтаж. Ако някои проектни файлове могат да бъдат генерирани от други файлове, ползата ви позволява да изпълните процеса на изграждане на най-оптималния начин е възможно, свеждане до минимум на броя на файловете обработени.

Исторически погледнато, една програма, предназначена за монтаж на C езикови проекти в операционната система Unix, но може да се използва за всеки проект. Първата версия на системата е създаден през 1977 г..

Днес, най-често срещаните трите опции за полезността, обединени от общи принципи на работа, но различен синтаксис и възможности:

GNU направи - най-често и функционален вариант

BSD грим (pmake) - използва се в функционалността на BSD проекти съответства приблизително GNU грим

nУверете се (Microsoft направи) - Работи под Windows, malofunktsionalen, а само основните принципи на грим.

Ние работим с GNU грим. На BSD системи (например, FreeBSD, тя може да бъде на разположение, както gmake, на Linux - просто се).

основни принципи

направи комунални работи в съответствие с правилата (правила). вписват в специален конфигурационен файл. Правила, определят целите, (цели). zavimosti между цели и набор от инструкции, за да попълните всяка цел.

Цели да отговарят на определени файлове. Освен това, целта не може да съответства на всеки файл, и се използва за други цели или групи определена последователност от команди. Тези цели се наричат ​​фалшиви цели.

Всяка цел може да зависи от изпълнението на други цели. цели за изпълнение изисква предварителното изпълнение на други цели, за които тя зависи.

В случай на връзката между целите, съответните досиета, целта е изпълнена само ако файловете, на които това зависи, е по-нова от файла, който съответства на целта. Това дава възможност да се възстанови само файловете, които зависят от променените файлове, но не изпълнява потенциално дълъг процес на възстановяване на всички файлове в проекта.

По този начин, Makefile определя зависимостта от графиката, в която полезността изработка изпълнява определена цел, доколкото е възможно чрез минимизиране на броя на операциите по сглобяване.

Спринт грим

Независимо от факта, че за да се направи правилата, можете да зададете произволна файл, обикновено се използва името по подразбиране Makefile. Също така поддържа няколко алтернативни имена по подразбиране, но има смисъл да се използват най-често.

ще използва Makefile. в текущата директория.

При стартиране направи възможно да се определи целта трябва да бъде изпълнена. Ако целта не е уточнено, стандартната цел, която е или включен в правилата подаде явно или неявно се използва от първата специфична цел.

Ясна индикация за целта се извършва инструкции DEFAULT_GOAL в Makefile.

предизвика цели за обработка на чиста Makefile по делото. намира в текущата директория.

Можете да посочите няколко цели.

Че целите могат да бъдат конфигурирани с помощта на променливи (от които по-долу). Когато стартирате направите, можете да зададете стойности за променливите:

Стойността на променливата PREFIX ще се предлага в Makefile на правила и може да се използва по време на монтажа.

Екипът също така поддържа редица възможности, от които най-важните са, както следва:

-е - тя позволява да ги укажете файла с правила

-C - ключове в определена директория, преди да извършвате, може да бъде например използват за извършване на серия от външен директория на директорията на проекта

-Б - забранява проверка на срокове цели и да ги налага напълно

Основният синтаксис направи

Основният дизайн, използван в досието грим. Това е, както следва:

dep1. dep2 - цели, които зависят от целта за цел

command1. command2 - изпълнените команди, за да се постигне целта за цел

Този фрагмент се посочва, че файла style.css зависи от файл SRC / по-малко / app.less и да се изгради, е необходимо да се изпълни lessc SRC / по-малко / app.less> style.css. Регенерация style.css файла ще се извършва само ако / app.less по-нови от файла style.css (толкова дълго, колкото, когато стартирате не правят ключов -B ще се уточнят) КРБ / по-малко файла.

Преди всяка команда в рамките на описанието на целта трябва да присъства знак за табулация. По принцип той е конфигуриран, но това е по-добре да се използва общо съгласие. Ако пространства се използват вместо табове, да направи няма да работи.

Както целите на обработката на команди черупки команди. Текстът на командния се показва, така че това не е заключение, екипът трябва да започва с символа @.

Всеки отбор се управлява в отделен корпус, черупката, така че команди не са свързани един с друг. С други думи, в командния ред - една черупка. Това поведение може да се замени от специална цел .ONESHELL.

Ако командата (или зависимости) трябва да се състои от няколко реда, използвайте тире \.

фалшиви цели

Цели, които не съответстват на файловете, и предназначени да изпълняват набор от команди, или групи zavimostey, декларирани, както следва:

.PHONY декларации могат да бъдат няколко, обикновено се определят един и предписва на всички съответни цели.

В нашия пример, обаждането чистите ще изпълни чисто целта. което със сигурност ще премахне временните файлове.

В случай, ако е налице зависимост фалшива мишена като друга фалшива мишена, след което връзката се осъществява пред независимия цел. По този начин, ние имаме механизъм напомня на рутината. Например, ние може да се определи целта на всички. събиране на всички файлове на проекта, както и индивидуални цели CSS. JS и PHP. събират разделно -files CSS, JS -files и обработка на PHP файлове.

Съответно, ние можем да напишете Makefile:

В резултат на това ние можем да използвате направи всички да възстанови всички файлове и, да речем, да направи CSS да се възстанови само CSS файл.

променливи

В грим файла, можете да използвате променливи, макар и правилно да се каже, че можете да използвате макроси.

Променливите, дефинирани в Makefile целеви или могат да бъдат предавани външно.

Променливи - макро, както и изчисляването на променливата винаги се прави в последния момент, преди замяната. Макроси могат да се използват навсякъде в текста на Makefile.

Заместването се извършва конструкт $ (VAR) за разлика от обвивка, която използва $ VAR.

Ако командата черупка използва черупки-променлива, трябва да се регистрирате $ квоти. го дублира, като например:

Освен Macrovariables има по-традиционни, в която се помещава веднъж. използвана от оператора да работи с: =. В нашите условия, достатъчно е да се използват обикновени променливи.

Често искате да дефинирате променлива, само ако все още не е определена. За тази цел, операторът =.

Съответно, ако ние наричаме

ще се използва UTF8 кодиране. а в случая

Тя ще се използва CP1251.

Ако променливата съдържа няколко реда, можете да използвате дефинира синтаксиса.

автоматични променливи

Уверете се поддържа набор от автоматични променливи, които да улеснят правилата за писане. Например, променливата $ @, съответстващ на настоящата цел (това, което си тръгна.), А променливата $ ^ - (. Т.е., в дясно от) списъка на зависимости. Така, например, можете да напишете:

В резултат на това WWW / JS / script.js е резултат от комбинирането на три Js-файлове.

Пълен списък на тези променливи е показан в документацията, най-интересното за нас:

$<— имя первой зависимости

$? - имената на всички зависимости, които са по-нови от целта

$ ^ - имената на всички цели на зависимости

Пълният списък може да се намери в документацията: Автоматични променливи.

условно изпълнение

В Makefile, можете да използвате условни изрази. Отново, ние не говорим за makroobrabotke направи, съответно, условни изрази работят по ниво Makefile, а не на нивото на отборите. Обикновено условни изрази се използват за определяне на определена цел, в зависимост от стойността на променливите. Например:

Както условия могат да бъдат проверени чрез определяне на променливата и нейната стойност:

Напълно с възможностите на условни изрази може да се намери в документацията: Условно синтаксис.

Модела правила

правила Модела (правила образец) ви позволяват да зададете правило преобразуване на един файл на друг въз основа на връзката между техните имена. Например, ние може да зададете правило за производство на даден обект файл от файл във език C:

Обърнете внимание на използването на%<. которая в таких правилах используется для получения имени исходного файла.

Шаблоните не трябва да бъде ограничен до разширението на файла. Ако оригиналните и изходните файлове съответстват един на друг, както и техните имена имат някаква връзка, можете да използвате правилото за модел.

Включване на други файлове, да направи

направи файл може да включва и други файлове, за да включват изявление.

По този начин, от файл, може да се изгради модулна система, тя често има смисъл да се извърши включи в условно изявлението.

Уверете се определя голям набор от функции, които могат да се използват като променливи (макроси). Извикването на функциите се извършва строителство:

Ви дават възможност да се справят с конци, имена на файлове, да организирате цикли на набор от ценности, да се организира условно кол други функции.

Няколко примера от кошера. Качваме се на текущото време (обърнете внимание на използването на: =.

File включване container.mk само ако съществува:

Образуване на MySQL база данни име, от името на проекта:

Добавянето на представки и наставки към имената на файловете

собствена функция

Можете да създадете свой собствен параметризирана функция чрез определяне на променливи, съдържащи специални променливи $ 1. $ 2. целесъобразно да премине аргумент. Обадете се на потребителска функция е специален макро повикване.

Много глупав пример:

Сега ние можем да напишете:

рекурсивни грим

В допълнение към включването на друга марка файл, Makefile може да изпълнява друг файл направи отделна грим процес.

Това е доста често срещана ситуация в случай на модулни проекти. Например, за всеки един от компонентите на проекта (сървър, клиент библиотека) осигурява Makefile. в същото време е основната Makefile. определяне на набор от общи настройки и причиняване на Makefile всеки подобект.

Повикване за извършване на Makefile често се нарича submake. Променливи $ (НАПРАВИ) се използват за обаждането.

Тази променлива съответства на начина, по който да се направи програмата. обработка на текущия файл.

За да се премине към променливи, наречен така че те трябва да бъдат изрично изнесени файл:

Стойността на променливата PREFIX ще се предлага в подсистема / Makefile.

направи паралел

Уверете се, можете да паралелизация изпълнението на правилата. За тази цел опцията -j. ви позволява да определите броя на паралелни процеси, използвани. В допълнение към ускоряване на процеса на изграждане, тази функция позволява понякога да се реализират на коляното е много прости сценарии по обработката на многозадачност. Например, можете да реализирате един прост, но функционален мениджър на опашка, за да се направи, като се използва за съхраняване на файлове задачи и работа директории за съхраняване на файлове в различни етапи (чакане, изпълнение, резултат).

Паралелно изпълнение може да бъде деактивирана с помощта на специално предназначение .NOTPARALLEL.

специфични цели

Уверете се поддържа набор от цели, които могат да бъдат използвани като модификатори за бъдещи цели или като инструкции за услуги. Ето някои от тези специални цели:

Фалшива - определя набор от фалшиви цели;

Подразбиране - определя целта, която ще се нарича ако не е намерен чувствителен цел е необходимо за други цели;

IGNORE - определя целите, за които е необходимо да се игнорира грешки в изпълнението на целта;

SILENT - определя набор от цели, за които е необходимо да се потискат продукцията на командите, изпълнен с цели;

NOTPARALLEL - забранява паралелно изпълнение на Makefile;

ONESHELL - изпълнява набор от команди, в една-единствена цел по време на черупката.

случаи на употреба

По-често се говори за да направи в рамките на програма за сглобяване на C / C ++, в крайна сметка, за тази цел тя първоначално е бил предназначен. Все пак, не - много по-гъвкав инструмент. Писане на Makefile, ние декларативно описване на определено състояние на отношенията между файловете, които всяка серия грим ще се опитат да се поддържа. Декларативен определение на държавата е много удобно, в случай на наложително език (например, черупки), ние би трябвало да извършват голям брой различни тестове, при което се получава сложен и сложен код.

В допълнение, използването на зависимости между фалшиви цели, което позволява в действителност, декларативно опише определен (ограничен) държавна машина, може да бъде полезно за писане на различни административни скриптове. Използване направи като скеле за различни черупки команда, ние имаме всъщност основна рамка за мидена черупка с готови потребителски интерфейс (наричаме направи + променлива трансмисия), вградени в зависимост, средства за проследяване, паралелно изпълнение, макро дефиниции и т.н.

Ето защо, основни познания прави възможно да се направят редица случаи за решаване на проблема, ако не и най-красивата, но доста бърз и надежден начин.

Свързани статии

Подкрепете проекта - споделете линка, благодаря!