Как сделать мк: Пошаговое руководство как сделать мастер-класс своими руками в пдф

Содержание

Как создать свой МК | virtual-college

1. Подготовка

 

Вы узнаете какие форматы мастер-классов бывают, я поделюсь своим опытом, какие из них лучше всего подходят рукодельнице.

Проведем анализ рынка и запросов аудитории, чтобы понять, какие мк популярны и что действительно хочет ваша аудитория. 

Дополнительно:

 

• Вы определитесь, какой формат вам лучше подходит для начала.

• Узнаете, как из одного продукта можно сделать несколько.

• Соберете данные по запросам и темам и найдете свою идею для мастер-класса бестселлера.

2. Создание мастер-класса в PDF формате

 

В этом блоке вы рассмотрите и внедрите 3 разных программы и сервиса, с помощью которых можно создать PDF файл: Microsoft Power Point, Canva, Google презентации.

 

Вы сможете делать фото мастер-класс в программе или онлайн-сервисе без сложных настроек и без установки на ваш компьютер.

Дополнительно:

 

• Вы научитесь быстро обрабатывать свои фотографии.

• Получите рекомендации по дизайну ваших мастер-классов.

• Познакомитесь с сервисом, в котором можно легко удалить задний фон с ваших фотографий.

• Научитесь загружать ваши мастер-классы в облачные сервисы для хранения и удобного скачивания вашими ученицами.

3. Создание мастер-класса в ВИДЕО формате

 

В этом блоке вы познакомитесь с несколькими программами. Выберете ту программу, которая подходит вам, научитесь в ней работать и создадите свои первые мастер-классы.

Дополнительно:

 

• Как создать свой канал на Youtube, как загружать свои видео на канал.

• Вы получите пошаговую инструкцию о том, как подготовиться к вебинару, чтобы ничего не забыть.

4. Проведение мастер-классов в формате совместного обучения (совместники)

Вы познакомитесь с самым любимым и самым продуктивным форматом совместного творчества на базе социальной сети ВКонтакте. Узнаете как организовать и провести такой формат.

Дополнительно:

• Научитесь создавать закрытую группу ВКонтакте для проведения МК.

• Научитесь создавать закрытый чат ВКонтакте для удобного общения участников мастер-класса.

• Научитесь пользоваться рассыльщиком сообщений, чтобы быстро оповещать ваших подписчиков о новых событиях.

5. Привлекательная упаковка

Вы узнаете как создавать красивую визуальную упаковку для своего продукта. Какие важные составляющие учитывать, чтобы демонстрировать качество. Какой нужно и не нужно писать текст.

Дополнительно:

• Вы сможете создавать более 10 видов различных 3Д упаковок для своих мк. Вам не нужны навыки дизайнера и сложные программы.

• Вы научитесь работать онлайн с редакторами и быстро создавать то, что вам нужно в едином стиле.

• Научитесь правильно использовать заголовки и подзаголовки, чтобы раскрыть суть продукта.

• Вы узнаете, где брать идеи, картинки, готовые шаблоны для работы.

Как создать мастер-класс в формате PDF?

План действий:

        1. Сортируем, обрезаем, подчищаем фотографии для МК. 

        2. Уменьшаем все фотографии до нужного размера.

        3. Находим подходящие шрифты и фоны в Интернете.

        4. Создаём новый файл в ФотоШопе.

        5. Оформляем первую страницу МК.

        7. Сохраняем страницу в формате PSD.

        8. Создаём все остальные страницы, заменяя в первой фото и текст.

        9. Проверяем и перепроверяем.

        10. Сохраняем все файлы в JPEG.

        11. Переводим все странички из JPEG в PDF.

        12. Объединяем все страницы в один файл.

        13. Сжимаем при необходимости.

А теперь много-много слов и скриншотов по каждому пункту 🙂

1. Сортируем, обрезаем и подчищаем фотографии для МК. Я ещё всегда очень обращаю внимание на то, чтобы все фото были максимально близки по яркости и по цветам. Плохо смотрится, когда одно фото темнее, другое светлее, одно желтоватое, другое синеватое. 

2. Уменьшаем все фотографии до нужного размера. При разрешении страницы будущего МК 150 dpi (которое мы выберем чуть позже) подойдёт разрешение снимков 600 на 400. При сжатии снимков можно чуточку повысить резкость.




При желании можно оформить фото в рамки. Можно просто добавить белые пиксели по краям, можно наложить какие-то более художественные рамки на сайте FotoFab к примеру. Все снимки сохраняйте в максимальном качестве! 

3. Находим подходящие шрифты и фоны в Интернете. Где конкретно скачивать шрифты, я не буду говорить. Таких сайтов тьма-тьмущая. Просто вводите в поиск что-то типа «скачать шрифты бесплатно» и будет Вам счастье! Только имейте ввиду, что не все шрифты содержат кириллицу, так что это тоже можно указать при поиске. Устанавливаются они элементарно, причём автоматически и в Word, и в PhotoShop. Фоны находятся аналогично.

4. Создаём новый файл в ФотоШопе. Нас интересует международный формат бумаги А4 и разрешение до 300 пикселей на дюйм (хватит даже 150).

5. Оформляем первую страницу нашего МК, накладывая на выбранный фон название, номер страницы, фото и описание к ним.

Самое главное, что нужно для этого уметь — работать в ФШ со слоями. Кто не пробовал, почитайте/посмотрите какие-нибудь уроки в интернете. На деле всё крайне примитивно. Правой кнопкой мыши «Создать слой» — «Удалить слой». А копируются и вставляются слои из других файлов вообще горячими клавишами:

        CTRL+A — выделить всё

        CTRL+С — копировать

        CTRL+Х — вырезать

        CTRL+V — вставить

Всё можно свободно двигать и, если нужно, удалять или делать невидимым. Второе, что нам понадобится — текст. Но тут вроде совсем всё просто. Не вижу смысла расписывать. Нумеруем все действия для удобства. Можно параллельно нумеровать и фотографии, но так чтоб совпадали цифры в тексте и на соответствующем фото.

7. Сохраняем страницу в формате PSD. Это обязательно!!! Нам нужно сохранить всё отдельными слоями для возможности дальнейшего редактирования, а оно нам ещё понадобится!

8. В тот же файл вставляем новые фото, текст, заголовок и номер взамен предыдущих и сохраняем под новым названием всё в том же формате PSD. И так поступаем со всеми страницами. Конечно гораздо легче просто заменять некоторые элементы в уже созданном шаблоне, чем каждый раз заново создавать всю страницу. Также создаем страницу-обложку, материалы/инструменты и заключительную страницу с фотографиями готовой работы.

9. Когда все страницы созданы, проверяем всё три раза. Потом оставляем работу на денёк и проверяем снова. Поверьте — это стоит сделать! Глаз замыливается со страшной силой и не видит очевидных ляпов. А знаете ли не комильфо как-то продавать МК с кучей ошибок.

10. После десятой проверки и правки сохраняем все файлы в формате JPEG. Качество можно ставить не самое высокое — 10 из 12 вполне хватит, чтобы файл не весил уж слишком много. (Конечно можно уже на этом этапе сохранять файлы в PDF, но они будут страшно много весить, так как сохранят много лишней информации, например о тексте.)

11. Далее заходим на волшебный сайт SmallPDF и офигеваем от того, какой он классный :))) Я его обожаю! Такой понятный, красивый и главное полезный! Чудо 🙂 И вот на нём мы сначала переводим все наши странички из JPEG в PDF.

12. Затем там же объединяем всё в один файл.

13. И если общий вес нашего МК превысит 5-10 Мбайт, то и сжимаем его там же. (Если Вы сохраняли файлы из PSD сразу в PDF, то этот пункт выполнить необходимо!)

Ну вот собственно и всё! Не забудьте конечно ещё сделать файл с выкройкой! Можно добавить её в сам мастер-класс отдельной страницей, я же предпочитаю отправлять её отдельным файлом. Может потом и про оцифровку выкроек что-то напишу.

Всем красивых мастер-классов!

Ваша Katrin Black 😉

Как сделать блокнот своими руками? Пошаговый МК с фото | АРТИзба

Я много могу говорить о планировании, но оно не работает без одного инструмента — это блокнот! Сегодня я подготовила простейший мастер-класс с пошаговым фото. Обратите внимание, что этот МК не предназначен для профессионалов. Моя цель была как можно сильнее упростить, чтобы с задачей справился даже школьник.

Подготовка к процессу

Нельзя начинать какое-либо дело без подготовки. Именно по этой причине я написала список материалов и инструментов, которые нам пригодятся.

основные материалы без которых не справиться

основные материалы без которых не справиться

1. Линейка, ножницы и малярный нож.

2. Мат для резки или любой другой материал которым можно защитить поверхность стола от порезов и клея.

3. Клей. Я использую полимерный клей. Подойдет и густой ПВА, но склейка деталей у вас займет больше времени.

4. Экокожа. Можно заменить переплетным кожзамом, замшей или тканью.

5. Шляпная резинка средней толщины. У меня ушло чуть больше 1 метра.

6. Переплетный или пивной картон. Он продается практически в каждом канцелярском магазине, стоит не очень дорого. Нам нужны 2 куска размером 21*15см.

7. Плотный картон (картсток). Одного листа А4 вполне хватит.

8. Доска для биговки. Можно обойтись линейкой и спицей (непишущей ручкой).

9. Люверсы и установщик. Первые можно купить в любом швейном магазине. Установщик покупать не обязательно, можно воспользоваться отверткой и молотком.

Желательно иметь швейную машинку, но не обязательно.

1 шаг. Собираем внешнюю часть обложки

Вы резаем из картстока деталь, размером 8*21см. Бигуем ее таким образом, чтобы по краям остались припуски в 2,5см.

Биговать можно как с помощью специальной доски, так и с помощью линейки и спицы

Биговать можно как с помощью специальной доски, так и с помощью линейки и спицы

Далее на внутреннюю часть одного из припуска мы должны приклеить деталь из переплетного картона.

Таким же образом приклеим вторую часть из переплетного картона.

внешняя сторона основы для блокнота

внешняя сторона основы для блокнота

У нас получится картонная основа для блокнота.

так выглядит каркас в собранном виде

так выглядит каркас в собранном виде

По желанию и по возможности скругляем уголки. Лично я всегда стараюсь сделать углы скругленными. На мой взгляд они делают работу очень аккуратной.

2 шаг. Обклеиваем кожей заготовку

Так как я обложку решила комбинировать, то и вам расскажу как это сделать. Если же вы не хотите комбинировать цвета на вашей обложке, то просто обклейте заготовку с внешней стороны, а припуски приклейте на изнаночную сторону.

Итак, я взяла кожу которая будет на верхней части обложки и приклеила ее отступив от правого края 13,5см. При этом отрез я сделала больше, с учетом всех припусков.

размер кожи компаньона — 21*15см

размер кожи компаньона — 21*15см

Для удобства приклеивания, на внешней стороне картонной заготовки я начертила линию. Она и будет служить мне ориентиром.

от правого края я отступила 13,5см и прочертила линию

от правого края я отступила 13,5см и прочертила линию

Дальше я просто приклеила отрез ориентируясь на линию.

Так как кожа имеет определенную толщину, а мне хочется в работе видеть аккуратность, я прибегаю к определенной хитрости. Например я не могу приклеить оставшуюся кожу в стык в стык, и при любом раскладе мне придется приклеивать остаток в нахлест. Причем нахлест получился приличный — 1см.

Для того чтобы избежать лишней толщины при приклеивании припусков, я варварски отрезаю все, что по моему мнению лишнее. Специально для вас этот процесс я запечатлела и визуально показала, что лишнее.

квадратик сверху и снизу это то, что лишнее

квадратик сверху и снизу это то, что лишнее

То что я закрасила на припуске, необходимо отрезать. Таким образом мы освободили толщину для кожи которая будет приклеиваться внахлест.

Вот так это выглядит с внешней стороны обложки.

Вот так это выглядит с внешней стороны обложки.

Далее нам необходимо приклеить припуски на изнаночную сторону. Но перед этим нужно упростить себе задачу и подготовиться перед приклеиванием припуска на скругленных уголках. Все что закрашено, необходимо вырезать.

В итоге должно получиться вот так:

Теперь мы можем приклеить припуски с трех сторон. В местах где уголки на данном этапе клей наносить не нужно. Должно получиться так:

углы не трогаем!

углы не трогаем!

После того как все стороны схватились, приступим к уголкам. Для аккуратности клей наносим прям каплями как на картон, так и на сам материал. Аккуратно помогая себе пинцетом подтягиваем припуск к центру и фиксируем пальцем. У меня пинцета нет, поэтому использую маленькие ножницы.

После этого, уголки можно ненадолго зафиксировать канцелярскими зажимами.

Далее приклеим оставшуюся кожу на свое законное место. Не забывайте что приклеиваем в нахлест 1см. Выглядит это так:

Остается только приклеить припуски. Но перед тем как их приклеивать не забудьте повторить те же манипуляции с уголками что и в прошлый раз. Напоминаю: Срезать уголки, приклеить по трем сторонам припуски и только потом приклеивать припуск на углах.

.После этого Обложку нужно прошить на швейной машинке. Если у вас нет машинки, можно пункт пропустить. Но как практика показывает, швейная строчка облагораживает работу и дает ей законченный вид.

3 шаг. Делаем застежку

Для того чтобы сделать застежку нам понадобится: картсток, 2 неодимовых магнита и остатки кожи.

Первое что нужно сделать — выкройка. Я практически всегда использую один и тот же размер. Выкройку делаем из картстока размером 9*2,5см. Скругляем с одной стороны углы. Теперь по выкройке вырезаем хлястик из кожи, которая будет с внешней стороны застежки. Приклеиваем магниты на выкройку. Получившуюся деталь приклеиваем магнитами внутрь к коже.

Далее вырезанную деталь мы приклеиваем к изнаночной стороне второго куска кожи. Обратите внимание! Что прошивать хлястик нужно перед тем как вырезать его из нижней части чожи.

Далее хлястик нужно пришить к обложке в том месте где вы хотите его видеть.

После этого шага приклеим на обложку еще 2 магнита. После того как вы их приклеите их нужно зафиксировать. Для этого я использую обрезки бумаги. Можно заменить бумажным скотчем.

4 шаг. Делаем карманы и форзацы.

Для карманов нам нужен картсток. Из него вырезаем детали размером 20,7*6см и 10*12см. В нужных местах скругляем.

Из дизайнерской бумаги (бумаги для скрапбукинга) вырезаем два форзаца размером 20,8*14,5см.

По краям скругляем уголки.

диаметр моего скругления 7мм

диаметр моего скругления 7мм

Далее выкройки для кармана нужно обклеить кожей.

Прежде чем приклеивать припуски нужно правильно подготовить все детали и срезать лишнее. Обратите внимание на цифры. Это порядок приклеивания припусков. С тех сторон где цифры нет приклеивать припуск не нужно.

После этого прошейте детали с тех сторон, где припуск склеен. Я покажу на примере углового кармана.

После прошивания ниточки нужно вывести на изнаночную сторону и там завязать

После прошивания ниточки нужно вывести на изнаночную сторону и там завязать

Далее дублируем изнаночную сторону кармана красивой бумагой. Это нужно для того чтобы работа смотрелась аккуратно.

Далее приклеиваем на один из форзацев нанося клей тонкой полоской на стороны где остался припуск.

Далее припуски приклеим с обратной стороны форзаца. Не забывайте про то, как обрабатывать уголки. Прошейте на швейной машинке.

Аналогичным способом приклеиваем карман второго форзаца. Не забывайте прятать ниточки с изнаночной стороны и фиксировать их узелком.

5 шаг. Соединяем все детали

Для того чтобы собрать все детали нам не хватает одной вещи. Это отрез из экокожи (желательно тонкой) размером 20,8*7см. Ее мы приклеиваем в центр блокнота с внутренней стороны.

Приклеиваем по центру, чтобы закрыть все перепады между переплетным картоном

Приклеиваем по центру, чтобы закрыть все перепады между переплетным картоном

На корешок с верху и снизу устанавливаем люверсы. Для этого Делаем два отверстия дыроколом и устанавливаем блочки.

Далее поочередно приклеиваем форзацы.

Для наилучшей сцепки деталей можно использовать канцелярские зажимы.

6 шаг. Делаем крепление для листов

На этом этапе нам понадобится шляпная резинка. Я использовала серебристую средней толщины. Ушло чуть болье метра.

Итак, вдеваем резинку с внешней стороны в крайнее левое отверстие и фиксируем зажимом. Остаток резинки вдеваем в правое отверстие так, чтобы с внешней стороны у нас образовался снежок между люверсами.

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

Повторяем это действие по кругу и в конце завязываем узелок соединяя начало резинки и конец.

Поздравляю! Обложка для блокнота в стиле мидори готов!

Если тебе понравился этот мастер-класс, подписывайся на канал и ставь пальчики вверх! Не забудь поделиться статьей в своей любимой социальной сети.

Вдохновленная скрапом, Анастасия Баканина

МК Как сделать проволочную подвеску-сердечко

Сегодня мы хотим показать вам, как сделать проволочную подвеску «Любовь».

Необходимые материалы и инструменты:

  • Проволока 0,8 мм
  • Проволока 0,2-0,3 мм
  • 6-8 мм любая бусина/фианит/кристалл
  • Плоскогубцы
  • Круглогубцы
  • Бокорезы
  • Ригель для колец
  • Ригель для соединительных колечек
  • Ювелирный молоток и наковальня (опционально)
  • Гравер (или дремель)

Шаг 1. Распечатать шаблон дизайна

Прежде чем сделать подвеску, нам нужно распечатать / нарисовать шаблон дизайна.

Шаг 2. Создайте форму сердца

Возьмите кусок проволоки 0,8 мм, затем создайте острый угол посередине, используя круглогубцы. Затем слегка изогните провод, используя палец, чтобы он соответствовал бумажному шаблону, как показано на рисунке 2. Теперь нижняя часть сердца завершена.

Для верхней части сердца мы можем создать две большие петли, используя ригель (рисунок 3-6). Аккуратно отрегулируйте проволоку, чтобы убедиться, что контур соответствует бумажному шаблону.

Шаг 3. Создайте буквы

Как только форма сердца будет завершена, мы можем начать создавать буквы «любовь». Поскольку слово относительно небольшое, вам не нужно точно подбирать бумажный шаблон. Для больших завитков мы можем использовать ригель; для маленьких завитков используйте круглогубцы. Не забудьте создать стиль рукописного текста и избегайте использования инструментов, которые создадут острый угол (например, плоскогубцы).

Когда слово закончено, оберните хвост буквы «е» вокруг рамки сердца, как показано на рисунке 12.

Шаг 4. Добавьте последние штрихи

Продвиньте бусину через левую сторону кулона. Затем закройте левую сторону, обмотав провод вокруг рамки (рисунок 14).

Если вы хотите, чтобы подвеска лучше держала свою форму, вы можете отбить молоточком форму сердца, как показано на рисунке 15.

Наконец, нам нужно создать петлю в верхней части подвески, чтобы она могла прикрепляться к цепочке ожерелья или шнуру. Возьмите кусок тонкой проволоки, закрепите дважды посередине, как показано на рисунке 16. Затем оберните несколько раз вокруг каркаса сердца. Чтобы создать петлю, поместите мини-ригель рядом с рамой и оберните оправку и рамку вместе, используя проволоку 0,2-0,3 мм (рисунок 18). Вынув ригель оберните еще несколько витков тонкой проволоки вокруг каркаса.

Теперь наш сердечный кулон завершен. Вы можете носить его как подвеску на шею или серьгу.

МК по упаковке — Millinda

Мастер-класс по изготовлению подарочной упаковки.
Отправлено 28 июл. 2009 г., 08:10 пользователем dudina4kids ДУДИНА Мария
Я тут подумала и решила сделать мастер для тех, кто хочет делать сам, и для тех, кому лениво ;))) 
И так, берем лист бумаги. Лучше брать картон или бумаги плостность более 150 грамм. Я беру 190 обычно. 
 
Определяемся по размерам мыла, какая, ориентировочно, должна быть ширина и высота вашей коробочки (A — ширина, B – высота.). Обращаю ваше внимание на то, что высота коробочки по середине и по краям будет отличатся. Это важный момент, не забудьте об этом, а то ваше мыло в итоге может не войти. 

После того как мы определились с высотой и шириной — рисуем два прямоугольника рядом (выделены синим). 

С одного края делаем клапан для соединения (выделено коричневым цветом). 

Далее самое интересное: надо нарисовать эллипсы в основаниях каждого прямоугольника. Тут обращаю ваше внимание на то, что лучше заранее сделать шаблон, и по нему рисовать. Потому что если эллипсы будут разные, в итоге будет кривая коробка. 

От ширины эллипса будет зависеть толщина(глубина) и высота коробки. Чем шире эллипс тем меньше высота и больше глубина (вариант выделенный зеленым). И соответственно наоборот — коробка выше, но уже (вариант выделен красным). 

Кому лень это все вырисовывать, можно скачать 

отсюда схему в PDF. Специально выкладываю в PDF для тех, кто знаком с вектором, что бы могли редактировать форму под себя. 

Примерный размер коробки на схеме В х Ш х Г : 10,5 х 12 х 4 см. 

И так у нас есть готовый шаблон. Вырезаем его из бумаги. Получаем заготовку )) 

 
Далее по черным линиям проводим шарировой ручкой ( лучше, если она уже не пишет, проводим с нажимом) 
Сгибаем шаблон и клеиваем его (я рекомендую ПВА) . Получаем вот такую штукенцию. 
 
После того как клей ПОЛНОСТЮ высохнет. Осторожно отгибаем эллипсы. 
Вуа-ля. Коробочка готова. 
 
Дальше занимаемся украшательством ))) 
Я как вы заметели сбоку пробила ряд дырок, куда протягиваем ленту или тесьму. 
Ранее в супермаркетах для ремонта я набрала кучу всяких образцов обоев. 
 
используем их для изготовления подложки. 
 
На принторе распечатываем текст и художественно его рвем!))) 
Ну вот и все . 
 
 
Надеюсь Вам это пригодиться. 

Как сделать макет своими руками? Как сделать макет дома своими руками

Дорогие Друзья! Мы всегда рады поделиться с Вами советами о том, как сделать макет своими руками.
Макетное творчество – очень увлекательное хобби, заразиться которым может абсолютно любой. Кто-то еще с детства увлекается миниатюрой, а кто-то начинает создавать первые работы уже в зрелом возрасте, найдя в этом прекрасном увлечении радость для души. Для кого-то это – целая профессия и дело всей жизни, а для кого-то – хобби, приносящее удовольствие и способ погрузиться в другой мир – мир миниатюры.
Если Вы впервые задумались о создании чего-то миниатюрного, если вы пока не знаете с чего начать и просто теряетесь в разнообразии материалов, то прочитайте эту статью и она поможет вам сделать первые шаги. В ней мы попытались собрать максимум информации о том, как сделать макет своими руками, из каких материалов и что для этого понадобится.

§ 1. Из чего сделать основание.

Основанием для вашего миниатюрного произведения может служить все что угодно.

• ДВП, ДСП, ОСБ, фанеры – отличные материалы на которых макет или диорама прослужат долгие годы и возможно даже, останутся на память следующим поколениям. Если вы впервые изготавливаете небольшую диораму, например, для школы или детского сада – подойдет даже кухонная разделочная доска. Они, кстати, сейчас бывают не только деревянные, но и пластиковые.

• Если вашему ребенку задали в школе задание «сделать макет», а времени не хватает и перед вами стоит задача выполнить задание из подручных материалов с наименьшими трудозатратами, то вполне подойдет лист плотного картона (например, от обувной коробки) или рама для картины, с которой в комплекте всегда есть лист все того же ДВП, да еще и сама рама придаст более законченный вид вашему произведению. Уточним, что основание из картона подойдет только в том случае, если изделие не будет тяжелым.

• Если вы задумались о том, как сделать макет своими руками, да еще и не простой, а с внутренней подсветкой или очень важен его презентабельный вид, например, для выставки – то рассмотрите вариант готового подмакетника. Для вас мы подготовили целую серию наиболее распространенных размеров европодмакетников из легких, но прочных материалов. Нижняя крышка съемная, что позволяет спрятать внутри элементы проводки (провода, блок питания, батарейки и т.д.) Верхнее основание покрыто серым винилом и уже окантовано изящным белым профилем. Вам остается только творить!

§ 2. Материалы для изготовления ландшафта.

1. Ландшафт.

Если вы решили не ограничиваться плоской поверхностью, а создать объемный рельеф, например, горы или холмы – используйте твердый строительный пенопласт. Этот материал имеет различные толщины и прекрасно режется канцелярским ножом. Так что даже новичок легко сформирует ландшафт. Более подробное видео можно посмотреть на нашем Ютуб канале.

2. Трава для макета.

Ну какой же макет без травы? И как не растеряться в разнообразии материалов, если впервые сталкиваешься с задачей «как сделать макет своими руками».
Итак, трава для макета может быть нескольких видов. Вы можете использовать один или скомбинировать несколько или все сразу, в зависимости от задумки.

• Присыпки – можно использовать чистые цвета или смешивать между собой, создавая различные новые оттенки для придания живописности своему ландшафту. Использовать их очень просто, как «раз, два, три!». Первым делом наносим клей на поверхность (клея лучше не жалеть и наносить хороший слой толщиной примерно один миллиметр), затем засыпаем присыпкой, сдуваем излишки и ждем высыхания.

Совет: для пенопластовых поверхностей используйте клей ПВА, а лучше специальный влагостойкий акриловый клей «Моррисон-Е» – прослужит долго и не будет впитывать влагу из воздуха. Использование клеев с содержанием растворителей просто разъест пенопластовое основание и ваши горы могут «растаять». Для твердых поверхностей подойдет все тот же «Моррисон-Е» или «Моррисон-Н» – в отличие от «Моррисон-Е» сохнет быстрее, но содержит растворитель в своем составе.

• Электростатическая трава – короткие ворсинки длиной от двух до пяти миллиметров.
Желательно применение специального прибора – флокатора. Если вкратце, флокатор создает электрическое поле и заставляет каждую ворсинку воткнуться вертикально, что очень реалистично имитирует живые травинки. В условиях отсутствия флокатора можно воспользоваться мягкой полиэтиленовой тарой с отверстиями в крышке или посыпать через сито.

Помните, что без флокатора обойтись можно, но в этом случае ворсинки травы не будут стоять вертикально.

Для вас мы подготовили различные оттенки электростатической травы – от жухлого до ярко-зеленого, высотой от двух до пяти миллиметров.

• Рулонная трава – идеальное решение для плоских ландшафтов. Просто приклейте лист к основанию и готово.

Совет: перед приклеиванием травы на основание диорамы, прогладьте лист со стороны бумаги утюгом на минимальной температуре – это поможет избежать складок и неровностей. Приклеивать лист можно на любой клей предназначенный для бумаги или используя специальный листовой двухсторонний скотч.

В нашем арсенале вы подберете нужный оттенок и формат листа от А4 до А1.

• Пучки травы – то, что добавит «изюминку».
Готовые пучки и полосы используются в качестве дополнения к основному травяному покрытию. Полосы можно разрезать на нужные кусочки и располагать вдоль дороги или забора, а пучки отлично выглядят, как отдельно, так и целыми кучками на любом участке ландшафта.

3. Земля.

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

• Самый быстрый способ для ровных поверхностей – это листовые материалы. Например, имитация асфальта или щебеночного покрытия в рулонах. Так же разнообразные самоклеющиеся текстуры различных поверхностей в листах формата А4.

• Для тех, кто не жалеет времени и сил для создания макета представлен огромный ассортимент в различных масштабах объемных текстур для имитации брусчатки, булыжной мостовой и многое другое.
Эти текстуры созданы для самостоятельного окрашивания акриловыми и эмалевыми красками. Вы можете сделать однотонную окраску ровным слоем, придав вид нового покрытия или добавить эффект старины, потертости и т.д. методом окраски сухой кистью.
Можно пойти еще дальше и сделать везеринг для эффектной передачи грязи, пыли или копоти с помощью сухих пигментов «Моррисон».

Совет: результат рекомендуется закрепить прозрачным матовым лаком. К основанию макета проще и надежнее всего приклеивать секундным клеем.

• Если необходимо отобразить на диораме землю, то на помощь придут уже знакомые присыпки для имитации грунта, торфянника или суглинка. Присыпки можно использовать самостоятельно или смешивать между собой. Приклеивать их лучше всего на те же клея, которые используются для имитации травы («Моррисон-Е» или «Моррисон-Н»).

• Для передачи песка, каменной насыпи или создания альпийской горки в саду используйте специальные присыпки с микрокамушками различных видов и фракций.

4. Вода.

Создать прудик, озеро, ручей или побережье на макете совсем несложно.

Способ №1.
Возьмите пластиковую прозрачную текстуру для имитации воды и вырежьте из нее овал, неровную кляксу или все, что вашей душе угодно. Приклейте на макет цветную бумагу голубого оттенка той же формы, что и вырезанный кусочек воды, а затем сверху приклейте за края водную поверхность. Края можно задекорировать имитацией песка, микрогалькой и пучками травы.

Способ №2.
Намечаем карандашом участок, на котором нужно сделать воду. Вырезаем канцелярским ножом углубление: от краев делаем плавный спуск к центру. Акриловыми или гуашевыми красками расписываем получившееся дно песочными оттенками и наводим «живости» на дне камушками и травой, которая в данном случае имитирует водоросли.

Совет: Углубление для воды лучше предусмотреть заранее и сделать подходящую основу для макета. Для этого перед началом всех работ, на основу для макета приклейте лист строительного пенопласта (о нем мы говорили в разделе «Ландшафт») необходимый толщины, в зависимости от глубины водоема – в нем и будет вырезаться углубление.

Из пластиковой имитации воды вырезаем ножницами повторяющуюся форму дна, припустив края примерно на один сантиметр больше. За эти края приклеиваем имитацию воды к макету. По периметру прикрываем торцы пластика имитацией песка, камушками и травкой. Таким образом, получается настоящая объемная водная поверхность с целым подводным миром.

§ 3. Как сделать макет дома.

Строения на макете – пожалуй, самый важный и волнительный момент, который вызывает наибольшее количество вопросов у новичка.
Итак, начнем по порядку:

1. Основа.

Первоначально создадим стены – для этого подойдет модельный пластик толщиной один или два миллиметра. Для начала начертите стены дома с оконными и дверными проемами на бумаге или воспользуйтесь готовыми развертками домов в интернете, если модель здания не принципиальна. Вырезанные из бумаги развертки послужат вам выкройкой. Приложите выкройки к пластику, обведите по контуру и вырезайте обычным канцелярским ножом. Полученные стены склейте между собой секундным клеем. После изготовьте и приклейте крышу по тому же принципу.

Уже получилось что-то похожее на дом, теперь приступаем к творчеству:

2. Декор.

• Стены и крышу можно покрасить или сделать роспись под кирпич, камень, черепицу и т.д.

• Опять же можно применить самоклеющиеся цветные текстуры. Для стен соответственно декоративный камень или кирпич, а для кровли – шифер или черепицу.

• И конечно самый сложный, трудоемкий, но самый эффектный способ – это оклейка объемными текстурами. На нашем сайте вы легко подберете именно то, что вам нужно. Для стен – кирпич, сайдинг, каменная кладка, а для кровли – различные виды черепицы и шифера. Сделать однотонную окраску или создать потертости и состарить поверхность – решать вам.

• После всех проделанных процессов становится виден результат, но пока наш дом стоит без окон и дверей. Чтобы изготовить остекление, нам понадобится прозрачная пленка для имитации стекла. Она достаточно твердая и легко клеится супер клеем. Вырежьте прямоугольник чуть большего размера, чем оконный проем и вклейте изнутри дома. Оконную раму можно вырезать из бумаги или из пластика 0,5 мм. Дверь также вырезается из пластика чуть большего размера и вклеивается изнутри дома.

Совет: с помощью не пишущей ручки или маникюрного инструмента можно продавить на двери имитацию филенки или узор.
Дополнить и оживить домик можно резными наличниками, дверным обкладом и крылечком все из того же модельного пластика.

§ 4. Подсветка макета.

Если вы задумались как сделать макет своими руками не простым, а светящимся, украсить макет дома ландшафтными фонарями, сделать столбы уличного освещения вдоль дороги и даже «зажечь» окна строений на макете, то мы с радостью поделимся всеми секретами.

На самом деле все не так сложно, как может показаться на первый взгляд.
Мы подготовили для вас подробные схемы подключения светодиодных модулей для подсветки домов и всех имеющихся у нас видов фонарей различных форм и размеров. С наглядными простейшими схемами освоить и подключить фонарики и модули для подсветки зданий с помощью батареек или блока питания справляются даже новички.

Совет: все работы по подсветке выполняются до вклеивания здания на макет. Для установки фонарей сделайте отверстия в ландшафте шилом или тонким сверлом. Окончательно зафиксируйте фонарики секундным клеем после того, как вы убедитесь в том, что все светится.

§ 5. Заборы, ограждения для макета.

Мы подготовили целый ряд заборов разнообразных форм и размеров для любых видов макетов в различных масштабах: садовые, парковые, кованые, простые и фигурные штакетники, леерные ограждения и даже живые изгороди.
На любой вкус и цвет и любого размера. Просто установите заборы на ландшафт макета небольшими каплями супер клея.

§ 6. Самая приятная часть – это озеленение макета.

1. Деревья, ели и кусты для диорам.

Первым делом определяемся с высотой деревьев и елей в зависимости от масштаба макета.

a) Растительность можно изготовить самостоятельно при помощи специальных различных присыпок, комкового фолиажа или лиственных и хвойных матов. Для изготовления стволов чаще всего используется стальная или медная проволока. Возьмите несколько отрезков проволоки нужной длины, скрутите их между собой в жгут примерно до середины, а остальное распустите на ветки. Для придания реалистичности стволу можно обклеить ствол салфетками на клей ПВА. Это поможет скрыть скрученную проволоку и имитировать структуру древесной коры. Затем покрасьте ствол в коричневый цвет акриловыми красками или гуашью. Еще один способ задекорировать ствол и придать ему большей реалистичности – это нанести на него быстросохнущий клей «Моррисон-Н» и обсыпать имитацией земли, которая у нас осталась после изготовления ландшафта.

• Самый быстрый способ изготовить крону – это комковой фолиаж. Просто приклейте уже готовые кусочки кроны к веточкам дерева на супер клей и готово!

Совет: такой удобный для использования материал вы можете изготовить самостоятельно, смешав в емкости рассыпчатую листву понравившегося цвета с эмульсией для подготовки листвы. На один пакетик такой рассыпчатой листвы добавьте примерно 100 мл. ( половина пузырька) Клея для фолиажа «Моррисон» и тщательно перемешайте. После замешивания дайте высохнуть смеси примерно один час. Таким образом у вас получатся достаточно эластичные и при этом пушистые комочки. Можно приступать к кронированию дерева.

• Есть еще много способов использования рассыпчатого фолиажа. Например, приклейте к стволу кусочки ваты ( лучше предварительно покрасить её в коричневый цвет), разделив на тонкие прозрачные волокна – это будет похоже на тонкие веточки. Затем аккуратно нанесите кисточкой на вату клей «Моррисон-Е» и через сито посыпьте фолиаж.

b) Если вы цените время – при озеленении макета вам на помощь всегда придут готовые деревья «Моррисон». Мы разработали для вас около пятидесяти различных видов деревьев и елей и продолжаем пополнять ассортимент.

Серия «Классик» – полюбившаяся и новичкам и профессионалам линейка деревьев высотой от двух до сорока пяти сантиметров.

Серия «Профи» – отличный выбор для любого макета. Эти деревья выполняются вручную нашими мастерами с большим опытом. «Профи» отлично смотрятся на любых макетах различных тематик, будь то железнодорожный макет, озеленение кукольного домика, миниатюрный сад, военная диорама или архитектурный макет.

Деревья и ели серии «АрхиФОРМА» удивительно оживляют макеты и создают солнечное настроение! Отличное соотношение цены и качества. Подходят для всех видов диорам, миниатюр и архитектурных макетов.

Текстильные деревья и елочки серии «Микро» – отличное подспорье для архитектурных макетов. Такими деревьями можно с легкостью высадить целый лес или облагородить территорию жилого комплекса. Этим деревьям точно ничего не страшно – никакие переезды макета по выставкам и офисам вашего заказчика. Они никогда не осыпятся и не оставят грязи под стеклянным колпаком. Деревья, кстати можно использовать в качестве кустарников. А различные оттенки серии «Микро» живописно сочетаются между собой. Но их главный плюс – эти «пушистики» нравятся абсолютно всем и процесс озеленения макета занимает считанные минуты.

Антуражные и поролоновые шарики – настоящее спасение для градостроительных планировочных условных макетов в мелких масштабах (1:500, 1:800, 1:1000, 1:2000). Так же озеленение на таких макетах можно изготовить из комкового фолиажа или листового ретикулята.

Кусты – куда же без них. Зеленые, красные, желтые, сиреневые и белые! Просто находка для макета цветущего сада и не только! Эти кустики точно станут настоящим украшением любой миниатюры или диорамы и никого не оставят равнодушным.

• Конечно же мы не забыли про хвойные деревья для ваших шедевров. У нас вы найдете пушистые Реалистичные ели и Сосны для ваших макетов и диорам. Их по достоинству уже оценили и профессионалы и начинающие моделисты и макетчики.

2. Цветы на макете и диораме.

Клумбы, цветочные насаждения в парке или в саду, а так же цветущие поляны всегда радуют глаз и создают прекрасное настроение.

• Вы можете использовать комковой фолиаж для имитации цветущей растительности и кустарников. Это самый простой и удобный способ создать цветущие клумбы, высадить цветочную изгородь или посадить цветочки рядом с забором.

• Имитация цветов в присыпках – универсальный пушистый материал, которым можно украсить живые изгороди, создать цветущие деревья и кусты или изготовить любые другие цветы.

• Цветочные ленты – быстрый способ изготовить цветочки в саду, высадив их рядами или сформировав клумбу.

• Цветные присыпки – «палочка выручалочка» в тех случаях, когда вам необходимо создать цветущие поляны или луга. На готовый зеленый ландшафт нанесите немного цветов и закрепите клеем.

§ 7. Модели авто, фигурки людей и пластиковые фонари.

Чаще всего нужны для создания дополнительного антуража на макетах и диорамах. Эти приятные мелочи улучшают детализацию макета, «вдыхают жизнь» и наполняют позитивным настроением, создаваемый вами миниатюрный мир.

Заключение.
Надеемся, что мы ответили на ваш вопрос: «Как сделать макет своими руками?» и вы погрузитесь в творчество с головой. Ваши работы всегда вдохновляют нас на создание новых материалов для макетов и диорам. Мы точно знаем, что ваши руки – золотые, ваша фантазия – безгранична, и мы стараемся не отставать и изобретать ка можно больше новинок. Давайте и дальше создавать прекрасное вместе!

 

Создаем MKV своими руками | ichip.ru

Еще недавно самым популярным форматом видео являлся DVD. Но создание собственного диска с переключаемыми аудиодорожками и субтитрами требует знания теории и умения работать в специ­альных программах. Сейчас, с приходом широко­полосного Интернета, популярность у DVD начал отбирать другой формат — MKV, или «Матрешка».

MKV-файл представляет собой контейнер, включающий в себя нескольких мультимедийных файлов.

Один MKV может содержать в себе несколько видео- и аудиодорожек. Добавлять больше одной видеодорожки бессмысленно, но вот наличие нескольких аудиодорожек и субтитров — это удобно. Пересматривая фильм или сериал на английском с русскими субтитрами, вы подучите иностранный язык и пополните словарь.

Кроме того, зачастую русский дубляж оставляет желать лучшего, поэтому фильм лучше посмотреть на языке оригинала. Работать с MKV гораздо проще, чем с DVD. Для создания файла нужно выполнить всего лишь несколько простых шагов.

Стоить отметить, что MKVToolnix — достаточно мощный редактор видео. В нашем руководстве описаны далеко не все возможности данной программы. В частности, при помощи MKVToolnix можно делать и собственные рипы. Это очень удобно, когда вам не нужно видео в Full HD и вы хотите посмотреть фильм на экране своего iPhone.

При помощи MKVToolnix есть возможность создавать 3D-видео. Однако для этого необходим исходный файл, который следует получить путем преобразования Blu-ray в MKV.

В качестве альтернативы MKVToolnix можно использовать VirtualDubMod. Но работа в этой программе связана с рядом определенных трудностей, которые предстоит решить пользователю, прежде чем он приступит непосредственно к обработке MKV-файла.

Прежде всего, ути­лита VirtualDubMod попросту «не умеет» работать с фор­матом MKV. Поэтому вам придется потратить некоторое время на поиск соответствующего плагина в Интернете. А кроме того, интерфейс этой бесплатной программы нельзя назвать ни интуитивным, ни удобным. Прочие же приложения, которые поддерживают редактирование MKV-файлов, являются платными (например, утилита Pinnacle Studio 17).

1. Необходимые программы

Первое, что нам понадобится, — это сама программа, то есть MKVToolnix. Данное приложение принадлежит к категории утилит Open Source (свободное программное обеспечение), и скачать его можно совершенно бесплат­но. MKVToolnix — это кроссплатформенное приложение, и на официальном сайте разработчиков вы найдете версии для Windows, Linux, Mac и даже FreeBSD.

2. Подготовка файлов

Оптимальнее всего работать с копиями видеофайлов. Если вдруг что-то случится с оригиналом, вам не придет­ся создавать или скачивать его заново. Создайте дубликаты файлов. Затем запустите MKVToolnix и в главном меню нажмите на кнопку «Добавить», чтобы выбрать подготовленные файлы.

3. Выбор видеодорожки

Как видно на скриншоте, в данный момент выходной файл содержит в себе две видеодорожки — MPEG4-p10 и MPEG4-p2. Вам следует снять отметку с дорожки MPEG4-p2— она нам больше не понадобится, так как мы создаем видео в формате Full HD. После этого, нажимая клавишу курсора «вниз», передвиньте ее на самую нижнюю позицию.

4. Добавляем аудиодорожку

Файл в формате MP3 (русский дубляж) перетащите наверх, затем в параметрах дорожки установите язык «русский», поставьте флаг дорожки «по умолчанию» и флаг дорожки «принудительно» так, как сделано на рисунке. Это укажет плеерам на то, что именно данную аудио­дорожку нужно воспроизводить первой. Соответственно, к английской аудиодорожке необходимо выставить прямо противоположные параметры.

5. Работа с субтитрами

Приступая к добавлению субтитров, нужно быть черзвычайно внимательным: случайно выставив неправиль­ный параметр, вы можете «испортить» выходной файл. К примеру, будет очень некстати, если кроме русского дубляжа плеер начнет автоматически воспроизводить и русские субтитры. В английских субтитрах менять параметры мы не будем: оставим все по умолчанию. А вот в русских необходимо выбрать язык (Russian) и поставить «Нет» на флаг дорожки «По умолчанию» и флаг дорожки «Принудительно».

6. Окончательная обработка

После того, как были выполнены все предыдущие шаги, необходимо нажать кнопку «Начать обработку» и дождаться, пока MKVToolnix закончит обработку файла. На современных компьютерах данный процесс занимает сравнительно небольшой промежуток времени. Букваль­но спустя минуту вы сможете насладиться результатами проделанной работы: отправиться смотреть ваше видео на мониторе или большом экране телевизора.

 

10 основных студийных уроков Марка «МК» Кинхена

Прославленный за свой фирменный хаус-звук, основанный на стилизованных фортепианных мелодиях и нарезанном вокале, уроженец Детройта Марк «МК» Кинчен был воспитан The Belleville Three — легендами техно Хуаном Аткинсом, Дерриком Мэй и Кевином Сондерсоном. К началу 90-х MK применил эти знания на практике, возглавив танцевальные чарты США с такими хитами, как Always и Love Changes, наряду с классическими домашними гимнами, включая Burning.

Сегодня MK — плодовитый ремиксер и продюсер с 500 дискографией и высокотехнологичной студией, полной вызывающего зависть оборудования.Здесь МК делится своими знаниями, чтобы дать всем начинающим продюсерам десять важных советов по студии, продакшену и индустрии.

1. Чтобы найти вдохновение, подражайте своим кумирам

«Каждый продюсер должен найти свой собственный голос или специализацию. Это может быть то, как вы аранжируете ударные или создаете басовую линию; для меня это был вокал. В идеальном мире я бы посоветовал каждому молодому продюсеру просто войти, заниматься своим делом и не думать ни о чем другом; но, как и многие люди, я слушал своих кумиров и пытался им подражать.В 80-х это было немного сложнее, потому что в 14 лет у меня не было Emulator II, как у Depeche Mode, поэтому я не мог издавать такие же звуки. Но я, по крайней мере, выучил ноты и мелодии и попытался достичь этого звука. Когда технологии пришли в норму, и я смог себе это позволить, стало намного проще выбирать звук, который я хотел создать.

«Говоря о хаус-музыке, я всегда думал:« Как они сделали этот трек? ». Я задавал себе такие вопросы, как: «Как они создали звук ударных или заставили качать хай-хет?».Я знал, что это не предустановка, поэтому хотел знать, как они запрограммировали свинг таким образом, и в конце концов понял, что это были два хай-хэта, качели с разным процентом. Но звуки, которые вы слышите в песнях сейчас, намного легче достижимы. Я помню, как слышал песню Deadmau5, и все на YouTube объясняли, как добиться того же самого звука, что избавляет от необходимости учиться ».

2. Если бы я начинал сегодня, я бы выбрал программный маршрут

«Я бы рекомендовал следовать своим путем, только если вы пытаетесь воссоздать хаус-звук 90-х.Моей первой клавиатурой был Roland Juno-106, и мне действительно пришлось повозиться с ним, чтобы получить желаемый звук. Мне никогда не удавалось получить от него хороший басовый звук, если он не был наложен на слои или я не пропустил его через эквалайзер. Раньше, если у вас была драм-машина Roland TR-909, было довольно легко воссоздать хаус-трек, но в большинстве случаев, когда вы только начинаете, вы не можете себе этого позволить. Так уж получилось, что я работал с Кевином Сондерсоном в студии, и у него было все, так что мне повезло.

«Некоторые продюсеры не играют, они рисуют заметки на компьютере, и это нормально, но вам нужно выяснить, получаете ли вы от этого хорошее настроение.Я бы предпочел играть партии, но если вы попытаетесь вернуться к старинному оборудованию, у вас возникнут проблемы с MIDI. Это довольно просто, но когда вы начнете использовать MIDI с компьютерами и программным обеспечением, в нем могут возникнуть ошибки. Раньше я тратил дни, пытаясь понять, почему конкретная драм-машина не синхронизируется с другой драм-машиной или моим компьютером. Теперь вы можете просто подключить ноутбук, вызвать Maschine, загрузить звуки ударных из Sylenth или Massive, и все готово. Поэтому я бы посоветовал выбрать программный путь, потому что это легкий путь, и программное обеспечение действительно может помочь вам научиться лучше анализировать сжатие или эквалайзер.

«До того, как я начал продюсировать хаус-музыку, я слушал все, что выходило, но я не слушал, исходя из желания стать известным ди-джеем или продюсером. Я действительно сосредоточился на том, чтобы создавать классную хаус-музыку и производить впечатление на людей, которых я окружал, таких как Кевин Сондерсон или Карл Крейг. Потом я выпустил Burning, и он никого не впечатлил, но он мне все равно понравился, так что в итоге я выпустил его сам. Вот почему я говорю детям, которые спрашивают меня, с чего начать: «Чувак, у тебя под рукой все платформы.Если вы еще не так хороши в продюсировании, сделайте крутой часовой сет и выложите его в Интернет. Напишите об этом в Твиттере, разместите на Facebook, SoundCloud или YouTube или попросите любимого исполнителя сделать ретвит. Нравится ли им, никогда не знаешь.

«Современная танцевальная музыка: ди-джеи всегда хотят играть то, что никто раньше не слышал, поэтому новые продюсеры находятся в лучшем положении. В наши дни действительно легко написать песню на ноутбуке и связаться с любимым ди-джеем через социальные сети — этим Джейми Джонс сломил множество новых продюсеров.Другой способ — проигрывать свои треки вживую. Даже если вы местный ди-джей и играете только для 30 человек в небольшом баре или пабе, включите пару треков, которые вы написали, и понаблюдайте за их реакцией, потому что вы можете определить, насколько это круто. Но я по-прежнему считаю, что Интернет — лучший маршрут, потому что вы можете читать комментарии, и если множество людей начнут просить ваш трек, тогда вам хорошо ».

4. Неважно, цифровой вы или аналоговый

«Аналоговая лента звучит великолепно, но ее больше никто не использует.Я помню, как у меня дома была 24-трековая 2-дюймовая машина MCI. Я записывала треки с помощью программного обеспечения, воспроизводила их на пленке, и они звучали потрясающе. Сейчас нет ничего, что действительно дало бы вам ту разницу между днем ​​и ночью, которую дает кассета. Он немного сжимает звук, согревает и насыщает его, чтобы заполнить все частоты. Винтажные аналоговые синтезаторы также звучат великолепно, но они дороги, и в наши дни трудно сказать, аналоговый синтезатор или цифровой.

“ У меня много Мугов, как старых, так и новых, и все они звучат великолепно, поэтому я не думаю, что использовать аналоговое или цифровое оборудование — это вопрос, о котором должны вообще думать новые продюсеры.Сегодня вы услышите, как продюсеры говорят об этом все время, потому что они думают, что аналоговое оборудование — это круто, но большинство людей не заметят разницы, если вы не используете какой-нибудь супер-дрянной цифровой синтезатор.

«У меня много цифровых анализаторов. Один из них называется Clarity M от TC Electronics, и, используя его, я могу сравнить формы волны из хорошо звучащего трека рядом с моим, чтобы увидеть, не ошибаюсь ли я только по тому, как он выглядит. Так что это отличный цифровой инструмент «.

5. Не злоупотребляйте сжатием, особенно если ваш трек предназначен для радио.

«В большинстве случаев сжатие будет отлично звучать на треке, но вы можете легко сжать песню слишком сильно и испортить ее.Компрессоры обычно очень хорошо звучат на фортепиано, бас-барабанах и басовых партиях — если вы все сделаете правильно. Когда вы параллельно сжимаете звуки ударных без бочки, это может склеить хай-хэты, хлопки и малый барабан. Но, как я уже сказал, вы можете легко перепроизводить трек, особенно тот, который звучит по радио, потому что радио все равно сжимается. Как только радио получит его, вы часто обнаружите, что трек слишком сжат и звучит как дерьмо.

«Такое случалось со мной несколько раз, и, поскольку я не инженер, я не замечал того, что заметил бы настоящий инженер.Так что теперь я стараюсь не слишком сильно сжимать барабаны и оставляю это своему мастеринг-инженеру. Вы можете применить компрессию к каждой отдельной дорожке, но вам нужно знать, к чему вы стремитесь, а не просто ставить компрессор на все ради этого.

«У меня много компрессоров, и я буду использовать их по отдельности и на шине микширования, но я буду применять их лишь немного. Я только что получил мастеринг-компрессор Shadow Hills, и он звучит великолепно, но я никогда не ударял по нему сильно. У меня также есть SSL AWS948, и я его тоже не забиваю, потому что, хотя в то время это может звучать хорошо, вы не хотите, чтобы трек так уходил из студии.”

6. Используйте панорамирование на вокальных дорожках; в противном случае держите его крепче

«Когда я начинал заниматься музыкой, микшерный пульт не использовался. У меня была драм-машина, синтезатор и секвенсор, и я не использовал компьютер. Я в основном прогонял все через стерео или диджейский микшер, так что панорамирование не было даже на моем радаре.

«Когда я начал ходить в студию Кевина Сондерсона, у меня была такая роскошь, но панорамировать было нечего, потому что в моих треках было всего несколько звуков.Я бы мог панорамировать краш, но оставил бы хай-хэты, хлопки, бочку, бас и основную линию клавиатуры посередине.

«Только когда я стал лучше записывать вокал, я начал заниматься панорамированием. Я бы сделал песню, в которой хук содержал бы 16 треков бэк-вокала, и мне пришлось бы их разложить, потому что вы можете сделать звучание трека больше, панорамируя гармонии в разных положениях. Например, если вы пишете хаус-музыку, вы не хотите раздвигать хай-хэты влево или вправо, потому что это ослабит звук барабана и сделает все звучание шире.Танцевальная музыка обычно должна быть плотной и прямо перед вашим лицом, а смысл панорамирования состоит в том, чтобы немного отодвинуть звук на расстояние. Вы также можете панорамировать крутой окружающий синтезаторный звук или фоновый эффект, чтобы он был заметен, но не был заметен, если в этом есть смысл ».

7. Для танцевальной музыки я предпочитаю использовать плагины предусилителя

«В наши дни предусилители не так важны для танцевальной музыки, но если вы создаете рок-музыку с живыми гитарами, я бы сказал, что их необходимо использовать.Это совершенно другой способ продюсирования, потому что вы не можете воссоздать электрогитару так, как вы можете с живым исполнителем. Я не уверен, какие усилители сейчас популярны, но в рок-музыке вы обычно используете живые инструменты, такие как гитара, бас и вокал, и они нуждаются в предварительном усилении.

«Иногда вы можете запускать синтезаторы через усилитель, но вы можете так же легко использовать плагин усилителя, чтобы получить некоторые искажения или другой звук. Иногда я использую плагины искажения, чтобы сделать звук немного грязнее или на вокале, чтобы получить эффект крика через мегафон.Тем не менее, он может хорошо звучать в материалах EDM, особенно в жестком дабстепе, потому что он может придать этому жанру крутой электронный рок. Но в наши дни предусилители — последнее, что стоит в списке продюсеров ».

Вы также можете панорамировать прохладный окружающий звук синтезатора или фоновый эффект, чтобы он был заметен, но не заметен, если это имеет смысл

8. Эквалайзер всех частот, которые вы не слышите, чтобы освободить больше места для вашего звука

«EQing — самая важная часть производства.Поскольку я очень много ди-джеев, мои уши не так хорошо слышат максимумы и минимумы, поэтому мне приходится использовать множество плагинов визуализации, чтобы увидеть материал. Но так важно понимать эквалайзер, и я рекомендую любому новому продюсеру узнать об этом все. Узнайте, что такое эквалайзер, включая все разные частоты — не только те, которые можно услышать, но и те, которые не слышны.

«Например, я всегда уменьшаю низкие частоты на сэмплированных хай-хэтах, потому что они создают приглушенный звук в треке. Даже для звуков, которые вы используете, которые, кажется, не имеют низких частот, вам нужно эквалайзировать их, потому что вы все еще получаете тот воздух.Вы можете не замечать этого в то время, но когда у вас работает 20 треков, этот низкий уровень воздуха начинает мешать вашей бас-барабану или басовой партии.

«По той же причине, когда я работаю над своими басовыми звуками, я эквалайзирую высокие частоты, потому что они могут немного шипеть. По сути, если у вас действительно крутой звук Moog, вы хотите, чтобы люди действительно могли его слышать, и чтобы эти пустые частоты не мешали всему, потому что именно так ваш трек будет выделяться в клубе.Большинство продюсеров, как правило, увеличивают басовые частоты на большом барабане, но если вы добавите слишком много низких частот, вы не услышите ничего больше в треке ».

9. Лучше микшировать через плохие колонки, чем через хорошие.

«Сведение — это взять каждый трек и убедиться, что каждый находится прямо в этой песне. Вы должны эквалайзировать каждый звук, накладывать на него эффекты и следить за тем, чтобы все уровни были правильными, а это довольно утомительная работа. Когда дело доходит до микширования, очевидно, что используемые вами динамики важны, но NS10 настолько популярны, потому что звучат как дерьмо.По сути, они настолько плоские, что, если вы можете сделать с ними что-то хорошее, они будут хорошо звучать на чем угодно — и я все еще пытаюсь найти пару для этой цели.

«Я буду ссылаться на Genelecs, которые мне нравятся, потому что они придают звуку немного окраски; но как только я ухожу из студии, треки перестают звучать одинаково, так что микшировать на Genelecs не стоит. С другой стороны, у меня есть пара KRK с шестидюймовыми низкочастотными динамиками, которые стоят 600 долларов, и я сделал Storm Queen — Look Right Through, который стал номером один для этих динамиков.Это заставляет задуматься, действительно ли ораторы имеют значение. Мой друг рассказал мне об этих колонках под названием Kii3s, и это лучшие колонки, которые я когда-либо слышал в своей жизни, но они стоят 13000 долларов. В общем, я очень рекомендую KRK новичкам ».

10. Мастеринг — это все о комнате — относитесь к нему как к чистому листу бумаги

«Мастеринг — это взять весь проект и убедиться, что он выглядит правильно. Во время мастеринга вы не можете опустить бас-барабан или поднять вокал, но вы можете установить ограничитель на малый барабан, который достигает пика, чтобы снизить его.Если ваш мастеринг-инженер считает, что ваш трек недостаточно яркий, он может повысить яркость всего трека, включая низкие частоты, или склеить все вместе, если звук слишком широкий, чтобы песня уместилась в определенном пространстве.

«Но во многом это связано с комнатой, в которой вы осваиваете. В спальне вы не можете быть хозяином; его достаточно сложно смешать в маленькой комнате. Вам нужна настоящая студия, где звук мертв, потому что, если вы микшируете в комнате без акустической обработки, вы услышите эхо.Это крайний пример, но представьте, что вы разучиваете песню в пустом спортзале. Это было бы безумием, но вы получите такой же плохой мастеринг эффекта в маленькой комнате, потому что в другом месте музыка будет звучать совершенно по-другому.

«Мастеринг подобен рисованию картинки на листе бумаги. Вы хотите рисовать на чистом холсте, а не на разорванном, окрашенном или покрытом пылью листе бумаги. Твоя комната — это чистый лист бумаги.

Android.mk | Android NDK | Разработчики Android

На этой странице описан синтаксис Android.mk файл сборки, используемый ndk-build .

Обзор

Файл Android.mk находится в подкаталоге jni / вашего проекта. каталог и описывает ваши исходные коды и общие библиотеки для системы сборки. На самом деле это крошечный фрагмент make-файла GNU, который система сборки анализирует один раз или более. Файл Android.mk полезен для определения параметров проекта, которые Application.mk , система сборки и переменные среды оставляют неопределенный.Он также может отменять настройки всего проекта для определенных модулей .

Синтаксис Android.mk позволяет группировать источники в модулей . Модуль представляет собой статическую библиотеку, разделяемую библиотеку или автономную библиотеку. исполняемый файл. Вы можете определить один или несколько модулей в каждом файле Android.mk и вы можете использовать один и тот же исходный файл в нескольких модулях. Только система сборки помещает разделяемые библиотеки в пакет вашего приложения. Кроме того, статические библиотеки могут создавать разделяемые библиотеки.

Помимо библиотек упаковки, система сборки обрабатывает множество других подробности для вас. Например, вам не нужно перечислять файлы заголовков или явно зависимости между сгенерированными файлами в вашем файле Android.mk . Сборка NDK система автоматически вычисляет эти отношения. В результате вы должен получить выгоду от поддержки нового набора инструментов / платформы в будущем NDK выпускает, не касаясь файла Android.mk .

Синтаксис этого файла очень близок к используемому в Android.mk файлов распространяется с полной версией Android Open Source Project. Пока система сборки реализация, в которой они используются, отличается, их сходство является преднамеренным проектное решение, направленное на упрощение повторного использования разработчиками приложений исходный код для внешних библиотек.

Основы

Перед подробным изучением синтаксиса полезно начать с понимания основы того, что содержит файл Android.mk . В этом разделе используется Android.mk файл в примере Hello-JNI с этой целью, объясняя роль что каждая строка в файле воспроизводится.

Файл Android.mk должен начинаться с определения переменной LOCAL_PATH :

  LOCAL_PATH: = $ (вызвать my-dir)
  

Эта переменная указывает расположение исходных файлов в разработке. дерево. Здесь макрос-функция my-dir , предоставляемая системой сборки, возвращает путь к текущему каталогу (каталог, содержащий Android.mk сам файл).

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

  включает $ (CLEAR_VARS)
  

Переменная CLEAR_VARS указывает на специальный файл GNU Makefile, который очищает многие LOCAL_XXX переменных для вас, например LOCAL_MODULE , LOCAL_SRC_FILES и ЛОКАЛЬНЫЕ_СТАТИЧЕСКИЕ_БИБЛИОТЕКИ . Обратите внимание, что он не очищает LOCAL_PATH . Этот переменная должна сохранять свое значение, потому что система анализирует все файлы управления сборкой в едином контексте выполнения GNU Make, где все переменные являются глобальными.Вы должны (повторно) объявите эту переменную перед описанием каждого модуля.

Далее, переменная LOCAL_MODULE хранит имя модуля, который вы хотите строить. Используйте эту переменную один раз для каждого модуля в вашем приложении.

  LOCAL_MODULE: = hello-jni
  

Имя каждого модуля должно быть уникальным и не содержать пробелов. Система сборки, когда он генерирует окончательный файл общей библиотеки, автоматически добавляет соответствующий префикс и суффикс к имени, которое вы назначаете LOCAL_MODULE .Например, приведенный выше пример приводит к созданию библиотеки с именем libhello-jni.so .

Примечание: Если имя вашего модуля уже начинается с lib , система сборки не добавьте дополнительный префикс lib ; он принимает имя модуля как есть и добавляет .so расширение. Итак, исходный файл изначально назывался, например, libfoo.c по-прежнему создает файл общих объектов с именем libfoo.so . Это поведение библиотеки поддержки, которые исходники платформы Android генерируют из Android.мк файлы; Имена всех таких библиотек начинаются с lib .

В следующей строке перечислены исходные файлы с пробелами, разделяющими несколько файлов:

  LOCAL_SRC_FILES: = hello-jni.c
  

Переменная LOCAL_SRC_FILES должна содержать список исходных файлов C и / или C ++. встроить в модуль.

Последняя строка помогает системе связать все вместе:

  включает $ (BUILD_SHARED_LIBRARY)
  

Переменная BUILD_SHARED_LIBRARY указывает на сценарий GNU Makefile, который собирает всю информацию, которую вы определили в переменных LOCAL_XXX , поскольку большинство последние включают .Этот сценарий определяет, что строить и как это делать.

В каталогах образцов есть более сложные примеры с комментариями. Android.mk файлов, которые вы можете просмотреть. Кроме того, Sample: native-activity предоставляет подробное объяснение файла Android.mk этого образца. Наконец-то, Переменные и макросы предоставляют дополнительную информацию о переменных из этого раздел.

Переменные и макросы

Система сборки предоставляет множество возможных переменных для использования в Android.mk файл. Многие из этих переменных имеют заранее заданные значения. Остальные вы назначаете.

В дополнение к этим переменным вы также можете определять свои собственные произвольные. Если вы это сделаете, оставьте имея в виду, что система сборки NDK резервирует следующие имена переменных:

  • Имена, начинающиеся с LOCAL_ , например LOCAL_MODULE .
  • Имена, начинающиеся с PRIVATE_ , NDK_ или APP . Система сборки использует это внутренне.
  • Имена в нижнем регистре, например my-dir . Система сборки использует их внутри, как хорошо.

Если вам нужно определить собственные удобные переменные в файле Android.mk , мы рекомендую к их именам добавлять MY_ .

Включаемые переменные, определенные NDK

В этом разделе обсуждаются переменные GNU Make, которые определяет система сборки. перед анализом файла Android.mk . При определенных обстоятельствах НДК может проанализировать ваш Android.mk несколько раз, используя другое определение для некоторых из этих переменных каждый раз.

CLEAR_VARS

Эта переменная указывает на сценарий сборки, который отменяет определение почти всех LOCAL_XXX переменные, перечисленные в разделе «Переменные, определенные разработчиком» ниже. Использовать этот переменная, чтобы включить этот сценарий перед описанием нового модуля. Синтаксис для с его помощью:

  включает $ (CLEAR_VARS)
  

BUILD_EXECUTABLE

Эта переменная указывает на сценарий сборки, который собирает всю информацию о модуль, который вы указали в переменных LOCAL_XXX , и определяет, как создать целевой исполняемый файл из перечисленных вами источников.Обратите внимание, что с помощью этого скрипт требует, чтобы вы уже присвоили значения LOCAL_MODULE и LOCAL_SRC_FILES , как минимум (для получения дополнительной информации об этих переменных см. Переменные описания модуля).

Синтаксис использования этой переменной:

  включает $ (BUILD_EXECUTABLE)
  
Примечание: Большинство приложений Android не включают исполняемые файлы, но они полезны для создание модульных тестов и других инструментов отладки.

BUILD_SHARED_LIBRARY

Эта переменная указывает на сценарий сборки, который собирает всю информацию о модуль, который вы указали в переменных LOCAL_XXX , и определяет, как создайте целевую общую библиотеку из перечисленных вами источников.Обратите внимание, что с помощью этого скрипт требует, чтобы вы уже присвоили значения LOCAL_MODULE и LOCAL_SRC_FILES , как минимум (для получения дополнительной информации об этих переменных см. Переменные описания модуля).

Синтаксис использования этой переменной:

  включает $ (BUILD_SHARED_LIBRARY)
  

Переменная разделяемой библиотеки заставляет систему сборки генерировать файл библиотеки с расширением .so .

BUILD_STATIC_LIBRARY

Вариант BUILD_SHARED_LIBRARY , который используется для создания статической библиотеки.В система сборки не копирует статические библиотеки в ваш проект / пакеты, но она можно использовать их для создания разделяемых библиотек (см. LOCAL_STATIC_LIBRARIES, и LOCAL_WHOLE_STATIC_LIBRARIES , ниже). Синтаксис использования этой переменной:

  включает $ (BUILD_STATIC_LIBRARY)
  

Переменная статической библиотеки заставляет систему сборки генерировать библиотеку с .a расширение.

БИБЛИОТЕКА ПРЕДВАРИТЕЛЬНОЙ ВСТРЕЧИ

Указывает на сценарий сборки, используемый для указания предварительно созданной разделяемой библиотеки.В отличие от в случае BUILD_SHARED_LIBRARY и BUILD_STATIC_LIBRARY , здесь значение LOCAL_SRC_FILES не может быть исходным файлом. Вместо этого это должен быть единственный путь к предварительно созданная разделяемая библиотека, например foo / libfoo.so . Синтаксис для использования этого переменная:

  включает $ (PREBUILT_SHARED_LIBRARY)
  

Вы также можете ссылаться на предварительно созданную библиотеку в другом модуле, используя LOCAL_PREBUILTS переменная.Для получения дополнительной информации об использовании предварительных сборок см. Используйте готовые библиотеки.

БИБЛИОТЕКА_СТАТИЧЕСКОЙ_РЕБИЛИЗАЦИИ

То же, что и PREBUILT_SHARED_LIBRARY , но для предварительно созданной статической библиотеки. Для дополнительную информацию об использовании предварительно созданных библиотек см. в разделе Использование предварительно созданных библиотек.

Целевые информационные переменные

Система сборки анализирует Android.mk один раз для каждого ABI, указанного в APP_ABI переменная, которая обычно определяется в вашем приложении .mk файл. Если APP_ABI все , тогда система сборки анализирует Android.mk один раз на ABI NDK поддерживает. В этом разделе описаны переменные, которые система сборки определяет каждый раз, когда анализирует Android.mk .

TARGET_ARCH

Семейство ЦП, на которое нацелена система сборки при анализе этого файла Android.mk файл. Эта переменная будет одной из следующих: arm , arm64 , x86 или x86_64 .

TARGET_PLATFORM

Номер уровня Android API, на который нацелена система сборки при анализе этого Android.mk файл. Например, образы системы Android 5.1 соответствуют Уровень API Android 22: android-22 . Полный список названий платформ и соответствующие образы системы Android см. в разделе «Собственные API-интерфейсы». В В следующем примере показан синтаксис для использования этой переменной:

  ifeq ($ (TARGET_PLATFORM), android-22)
    # ... сделай что-нибудь ...
endif
  

TARGET_ARCH_ABI

ABI, на который нацелена система сборки, когда она анализирует этот файл Android.mk . В таблице 1 показаны настройки ABI, используемые для каждого поддерживаемого ЦП и архитектуры.

Таблица 1. Настройки ABI для различных процессоров и архитектур.

ЦП и архитектура Настройка
ARMv7 armeabi-v7a
ARMv8 AArch64 arm64-v8a
i686 x86
x86-64 x86_64

В следующем примере показано, как проверить ARMv8 AArch64 в качестве целевого объекта. Комбинация CPU-and-ABI:

  ifeq ($ (TARGET_ARCH_ABI), arm64-v8a)
  #... сделай что-нибудь ...
endif
  

Для получения дополнительных сведений об архитектуре ABI и связанных проблемах совместимости, обратитесь к Android ABI.

Новые целевые ABI в будущем будут иметь другие значения.

TARGET_ABI

Объединение целевого уровня API Android и ABI. Это особенно полезно когда вы хотите протестировать конкретный образ целевой системы для реального устройства. Например, чтобы проверить 64-разрядное устройство ARM, работающее на Android API уровня 22:

  ifeq ($ (TARGET_ABI), android-22-arm64-v8a)
  #... сделай что-нибудь ...
endif
  

Переменные описания модуля

Переменные в этом разделе описывают ваш модуль в системе сборки. Каждый описание модуля должно следовать этой основной схеме:

  1. Инициализировать или отменить определение переменных, связанных с модулем, с помощью CLEAR_VARS переменная.
  2. Присвойте значения переменным, используемым для описания модуля.
  3. Настройте систему сборки NDK на использование соответствующего сценария сборки для модуля, используя переменную BUILD_XXX .

LOCAL_PATH

Эта переменная используется для указания пути к текущему файлу. Вы должны это определить в начале вашего файла Android.mk . В следующем примере показано, как сделать итак:

  LOCAL_PATH: = $ (вызвать my-dir)
  

Сценарий, на который указывает CLEAR_VARS , не очищает эту переменную. Следовательно, вам нужно определить его только один раз, даже если ваш файл Android.mk описывает несколько модулей.

МЕСТНЫЙ_МОДУЛЬ

В этой переменной хранится имя вашего модуля.Он должен быть уникальным среди всех модулей имена и не должны содержать пробелов. Вы должны определить его перед включением любого скрипты (кроме CLEAR_VARS ). Вам не нужно добавлять lib префикс или расширение файла .so или .a ; система сборки делает эти модификации автоматически. На всем вашем Android.mk и Application.mk files, обращайтесь к вашему модулю по его неизмененному имени. Например, следующие строка приводит к созданию модуля разделяемой библиотеки с именем libfoo.так :

  LOCAL_MODULE: = "foo"
  

Если вы хотите, чтобы сгенерированный модуль имел имя, отличное от lib + значение LOCAL_MODULE , вы можете использовать переменную LOCAL_MODULE_FILENAME , чтобы задать сгенерированный модуль — это имя по вашему выбору.

LOCAL_MODULE_FILENAME

Эта необязательная переменная позволяет переопределить имена, которые система сборки по умолчанию используется для файлов, которые он генерирует. Например, если имя вашего LOCAL_MODULE — это foo , вы можете заставить систему вызывать файл, который она генерирует libnewfoo .В следующем примере показано, как это сделать:

  МЕСТНЫЙ_МОДУЛЬ: = foo
LOCAL_MODULE_FILENAME: = libnewfoo
  

Для модуля общей библиотеки в этом примере будет создан файл с именем libnewfoo.so .

Примечание: Вы не можете переопределить путь к файлу или расширение файла.

LOCAL_SRC_FILES

Эта переменная содержит список исходных файлов, которые система сборки использует для сгенерировать модуль. Перечислить только те файлы, которые фактически передает система сборки компилятору, поскольку система сборки автоматически вычисляет все связанные зависимости.Обратите внимание, что вы можете использовать как относительный (до LOCAL_PATH, ), так и абсолютный пути к файлам.

Мы рекомендуем избегать абсолютных путей к файлам; относительные пути делают ваш Android.mk файл более портативный.

Примечание: Всегда используйте косую черту в стиле Unix (/) в файлах сборки. Сборка система не обрабатывает обратную косую черту в стиле Windows (\) должным образом.

LOCAL_CPP_EXTENSION

Вы можете использовать эту необязательную переменную, чтобы указать расширение файла, отличное от .cpp для ваших исходных файлов C ++. Например, следующая строка изменяет расширение до .cxx . (Настройка должна включать точку.)

  LOCAL_CPP_EXTENSION: = .cxx
  

Эту переменную можно использовать для указания нескольких расширений. Например:

  LOCAL_CPP_EXTENSION: = .cxx .cpp .cc
  

LOCAL_CPP_FEATURES

Вы можете использовать эту необязательную переменную, чтобы указать, что ваш код зависит от конкретных Возможности C ++.Он включает правильные флаги компилятора и компоновщика во время сборки процесс. Для предварительно созданных двоичных файлов эта переменная также объявляет, какие функции двоичный файл зависит от, что помогает гарантировать правильную работу окончательной компоновки. Мы рекомендуется использовать эту переменную вместо включения -frtti и -fexceptions прямо в определении LOCAL_CPPFLAGS .

Использование этой переменной позволяет системе сборки использовать соответствующие флаги для каждый модуль. Использование LOCAL_CPPFLAGS заставляет компилятор использовать все указанные флаги для всех модулей, независимо от реальной необходимости.

Например, чтобы указать, что ваш код использует RTTI (информация о типе времени выполнения), напишите:

  LOCAL_CPP_FEATURES: = rtti
  

Чтобы указать, что ваш код использует исключения C ++, напишите:

  LOCAL_CPP_FEATURES: = исключения
  

Вы также можете указать несколько значений для этой переменной. Например:

  LOCAL_CPP_FEATURES: = функции rtti
  

Порядок, в котором вы описываете значения, не имеет значения.

LOCAL_C_INCLUDES

Вы можете использовать эту необязательную переменную, чтобы указать список путей относительно NDK корневой каталог , чтобы добавить к пути поиска включения при компиляции всех исходники (C, C ++ и Assembly). Например:

  LOCAL_C_INCLUDES: = источники / foo
  

Или даже:

  LOCAL_C_INCLUDES: = $ (LOCAL_PATH) / <подкаталог> / foo
  

Определите эту переменную перед установкой любых соответствующих флагов включения через LOCAL_CFLAGS или LOCAL_CPPFLAGS .

Система сборки также использует LOCAL_C_INCLUDES путей автоматически при запуске собственная отладка с помощью ndk-gdb.

LOCAL_CFLAGS

Эта необязательная переменная устанавливает флаги компилятора, которые система сборки передает, когда сборка исходных файлов C и C ++. Возможность сделать это может быть полезна для указание дополнительных определений макросов или параметров компиляции. Используйте LOCAL_CPPFLAGS чтобы указать флаги только для C ++.

Старайтесь не менять уровень оптимизации / отладки в вашем Android.mk файл. Система сборки может обрабатывать этот параметр автоматически, используя соответствующая информация в файле Application.mk . Это позволяет система сборки для создания файлов полезных данных, используемых во время отладки.

Можно указать дополнительные пути включения, написав:

  LOCAL_CFLAGS + = -I <путь>,
  

Однако лучше использовать для этой цели LOCAL_C_INCLUDES , поскольку выполнение поэтому также позволяет использовать пути, доступные для собственной отладки с ndk-gdb.

LOCAL_CPPFLAGS

Необязательный набор флагов компилятора, который будет передан при сборке исходного кода C ++. файлы только . Они появятся после LOCAL_CFLAGS на компиляторе командная строка. Используйте LOCAL_CFLAGS , чтобы указать флаги как для C, так и для C ++.

ЛОКАЛЬНЫЕ_СТАТИЧЕСКИЕ_БИБЛИОТЕКИ

В этой переменной хранится список модулей статических библиотек, в которых модуль зависит.

Если текущий модуль является разделяемой библиотекой или исполняемым файлом, эта переменная будет заставить эти библиотеки быть скомпонованы в результирующий двоичный файл.

Если текущий модуль является статической библиотекой, эта переменная просто указывает, что другие модули в зависимости от текущего также будут зависеть от перечисленных библиотеки.

LOCAL_SHARED_LIBRARIES

Эта переменная — список разделяемых библиотек модулей , на которых этот модуль зависит во время выполнения. Эта информация необходима во время ссылки, а также для встраивания соответствующая информация в сгенерированном файле.

LOCAL_WHOLE_STATIC_LIBRARIES

Эта переменная является вариантом LOCAL_STATIC_LIBRARIES и выражает компоновщик должен обрабатывать связанные модули библиотеки как целые архивы .Для дополнительную информацию обо всех архивах см. в документации GNU ld для - весь архив флаг.

Эта переменная полезна, когда есть циклические зависимости между несколькими статические библиотеки. Когда вы используете эту переменную для создания общей библиотеки, она будет заставить систему сборки добавить все объектные файлы из ваших статических библиотек в окончательный двоичный файл. Однако это неверно при создании исполняемых файлов.

LOCAL_LDLIBS

Эта переменная содержит список дополнительных флагов компоновщика для использования при построении ваша общая библиотека или исполняемый файл.Это позволяет использовать префикс -l для передачи название конкретных системных библиотек. Например, следующий пример сообщает компоновщик для создания модуля, который ссылается на /system/lib/libz.so при загрузке время:

  LOCAL_LDLIBS: = -lz
  

Список открытых системных библиотек, на которые вы можете ссылаться в этом NDK. выпуск, см. Собственные API.

Примечание: Если вы определяете эту переменную для статической библиотеки, система сборки игнорирует это, а ndk-build выводит предупреждение.

LOCAL_LDFLAGS

Список других флагов компоновщика, которые система сборки использует при построении вашего разделяемая библиотека или исполняемый файл. Например, чтобы использовать компоновщик ld.bfd на ARM / X86:

  LOCAL_LDFLAGS + = -fuse-ld = bfd
  
Примечание: Если вы определяете эту переменную для статической библиотеки, система сборки игнорирует это, и ndk-build выводит предупреждение.

LOCAL_ALLOW_UNDEFINED_SYMBOLS

По умолчанию, когда система сборки обнаруживает неопределенную ссылку, встречается при попытке создать общий ресурс выдает ошибку undefined symbol .Этот error может помочь вам отловить ошибки в исходном коде.

Чтобы отключить эту проверку, установите для этой переменной значение true . Обратите внимание, что этот параметр может вызвать загрузку разделяемой библиотеки во время выполнения.

Примечание: Если вы определяете эту переменную для статической библиотеки, система сборки игнорирует это, и ndk-build выводит предупреждение.

LOCAL_ARM_MODE

По умолчанию система сборки генерирует целевые двоичные файлы ARM в режиме thumb , где каждая инструкция имеет ширину 16 бит и связана с библиотеками STL в Каталог thumb / .Определение этой переменной как arm заставляет систему сборки генерировать объектные файлы модуля в 32-битном режиме arm . Следующий пример показывает, как это сделать:

  LOCAL_ARM_MODE: = рука
  

Вы также можете указать системе сборки для сборки только определенных источников в arm добавив суффикс .arm к именам исходных файлов. Например, В следующем примере система сборки всегда компилирует bar.c в режиме ARM, но для сборки foo.c согласно значению LOCAL_ARM_MODE .

  LOCAL_SRC_FILES: = foo.c bar.c.arm
  
Примечание: Вы также можете заставить систему сборки генерировать двоичные файлы ARM, установив APP_OPTIM в файле Application.mk для отладки . Указание отладки вызывает сборку ARM, потому что отладчик инструментальной цепочки не обрабатывает код Thumb должным образом.

LOCAL_ARM_NEON

Эта переменная имеет значение, только если вы нацелены на armeabi-v7a ABI.Это позволяет использовать встроенные функции компилятора ARM Advanced SIMD (NEON) в ваших C и C ++ исходники, а также инструкции NEON в файлах сборки.

Обратите внимание, что не все процессоры на базе ARMv7 поддерживают расширения набора команд NEON. По этой причине вы должны выполнить обнаружение времени выполнения, чтобы иметь возможность безопасно использовать этот код во время выполнения. Для получения дополнительной информации см. Поддержка Neon и Особенности процессора.

В качестве альтернативы можно использовать суффикс .neon , чтобы указать, что система сборки компилировать только определенные исходные файлы с поддержкой NEON.В следующем примере система сборки компилирует foo.c с поддержкой большого пальца и неоновой подсветкой, bar.c с поддержка большого пальца и zoo.c с поддержкой ARM и NEON:

  LOCAL_SRC_FILES = foo.c.neon bar.c zoo.c.arm.neon
  

Если вы используете оба суффикса, .arm должно предшествовать .neon .

LOCAL_DISABLE_FORMAT_STRING_CHECKS

По умолчанию система сборки компилирует код с защитой строки формата.Делает поэтому вызывает ошибку компилятора, если строка непостоянного формата используется в printf -style function. Эта защита включена по умолчанию, но вы можете отключить это путем установки значения этой переменной на true . Мы не рекомендуем это делать без веской причины.

LOCAL_EXPORT_CFLAGS

Эта переменная записывает набор флагов компилятора C / C ++ для добавления к LOCAL_CFLAGS определение любого другого модуля, который использует его через LOCAL_STATIC_LIBRARIES или LOCAL_SHARED_LIBRARIES переменных.

Например, рассмотрим следующую пару модулей: foo и bar , которые зависит от foo :

  включает $ (CLEAR_VARS)
LOCAL_MODULE: = foo
LOCAL_SRC_FILES: = foo / foo.c
LOCAL_EXPORT_CFLAGS: = -DFOO = 1
включить $ (BUILD_STATIC_LIBRARY)


включить $ (CLEAR_VARS)
LOCAL_MODULE: = бар
LOCAL_SRC_FILES: = bar.c
LOCAL_CFLAGS: = -DBAR = 2
LOCAL_STATIC_LIBRARIES: = foo
включить $ (BUILD_SHARED_LIBRARY)
  

Здесь система сборки передает компилятору флаги -DFOO = 1 и -DBAR = 2 . при построении бар.с . Он также добавляет экспортированные флаги к вашему модулю. LOCAL_CFLAGS , чтобы вы могли легко их переопределить.

Кроме того, отношения между модулями транзитивны: если zoo зависит от bar , который, в свою очередь, зависит от foo , затем zoo также наследует все флаги экспортировано из foo .

Наконец, система сборки не использует экспортированные флаги при локальной сборке. (т. е. создание модуля, флаги которого он экспортирует).Таким образом, в примере выше, он не передает -DFOO = 1 компилятору при сборке foo / foo.c . К строить локально, используйте вместо него LOCAL_CFLAGS .

LOCAL_EXPORT_CPPFLAGS

Эта переменная такая же, как LOCAL_EXPORT_CFLAGS , но только для флагов C ++.

LOCAL_EXPORT_C_INCLUDES

Эта переменная такая же, как LOCAL_EXPORT_CFLAGS , но для C включает пути. Это полезен в тех случаях, когда, например, бар.c необходимо включить заголовки из модуль foo .

LOCAL_EXPORT_LDFLAGS

Эта переменная такая же, как LOCAL_EXPORT_CFLAGS , но для флагов компоновщика.

LOCAL_EXPORT_LDLIBS

Эта переменная совпадает с LOCAL_EXPORT_CFLAGS , сообщая системе сборки передать компилятору имена конкретных системных библиотек. Вставьте -l в имя каждой указанной вами библиотеки.

Обратите внимание, что система сборки добавляет флаги импортированного компоновщика к значению вашего переменная модуля LOCAL_LDLIBS .Это происходит из-за того, как работают компоновщики Unix.

Эта переменная обычно полезна, когда модуль foo является статической библиотекой и имеет код, зависящий от системной библиотеки. Затем вы можете использовать LOCAL_EXPORT_LDLIBS для для экспорта зависимости. Например:

  включает $ (CLEAR_VARS)
LOCAL_MODULE: = foo
LOCAL_SRC_FILES: = foo / foo.c
LOCAL_EXPORT_LDLIBS: = -llog
включить $ (BUILD_STATIC_LIBRARY)

включить $ (CLEAR_VARS)
LOCAL_MODULE: = бар
LOCAL_SRC_FILES: = бар.c
LOCAL_STATIC_LIBRARIES: = foo
включить $ (BUILD_SHARED_LIBRARY)
  

В этом примере система сборки помещает -llog в конец команды компоновщика. при сборке libbar.so . Это сообщает компоновщику, что, поскольку libbar.so зависит от foo , а также от библиотеки системного журнала.

LOCAL_SHORT_COMMANDS

Установите для этой переменной значение true , если ваш модуль имеет очень большое количество источников. и / или зависимые статические или разделяемые библиотеки.Это заставит систему сборки использовать синтаксис @ для архивов, содержащих промежуточные объектные файлы или ссылки библиотеки.

Эта функция может быть полезна в Windows, где командная строка принимает максимум всего 8191 символа, что может быть слишком мало для сложных проектов. Это также влияет на компиляцию отдельных исходных файлов, помещая почти все компиляторы флаги и внутри файлов списков.

Обратите внимание, что любое значение кроме true вернется к поведению по умолчанию.Ты также можно определить APP_SHORT_COMMANDS в вашем файле Application.mk , чтобы заставить это поведение для всех модулей в вашем проекте.

Мы не рекомендуем включать эту функцию по умолчанию, поскольку она делает сборку помедленнее.

LOCAL_THIN_ARCHIVE

Установите для этой переменной значение true при создании статических библиотек. Это будет сгенерировать тонкий архив , файл библиотеки, не содержащий объектных файлов, но вместо этого просто пути к файлам к фактическим объектам, которые обычно содержать.

Это полезно для уменьшения размера вывода сборки. Недостаток в том, что такие библиотеки не могут быть перемещены в другое место (все пути внутри них относительны).

Допустимые значения: истина , ложь или пусто. Значение по умолчанию может быть установлено в вашем Application.mk через переменную APP_THIN_ARCHIVE .

Примечание: Это игнорируется для нестатических библиотечных модулей или предварительно созданной статической библиотеки. единицы.

LOCAL_FILTER_ASM

Определите эту переменную как команду оболочки, которую система сборки будет использовать для фильтрации файлы сборки, извлеченные или сгенерированные из файлов, которые вы указали для LOCAL_SRC_FILES . Определение этой переменной вызывает следующее:

  1. Система сборки генерирует временный файл сборки из любого источника C или C ++ файл, а не компилировать их в объектный файл.
  2. Система сборки выполняет команду оболочки в LOCAL_FILTER_ASM на любом временный файл сборки и любой файл сборки, указанный в LOCAL_SRC_FILES , таким образом создается еще один временный файл сборки.
  3. Система сборки компилирует эти отфильтрованные файлы сборки в объектный файл.

Например:

  LOCAL_SRC_FILES: = foo.c bar.S
LOCAL_FILTER_ASM: =

foo.c --1 -> $ OBJS_DIR / foo.S.original --2 -> $ OBJS_DIR / foo.S --3 -> $ OBJS_DIR / foo.o
bar.S --2 -> $ OBJS_DIR / bar.S --3 -> $ OBJS_DIR / bar.o
  

«1» соответствует компилятору, «2» — фильтру, «3» — ассемблеру. Фильтр должен быть отдельной командой оболочки, которая принимает имя ввода. file в качестве первого аргумента, а имя выходного файла — в качестве второго.Например:

  myasmfilter $ OBJS_DIR / foo.S. исходный $ OBJS_DIR / foo.S
myasmfilter bar.S $ OBJS_DIR / bar.S
  

Функциональные макросы, предоставляемые NDK

В этом разделе объясняются функциональные макросы GNU Make, которые предоставляет NDK. Использовать $ (позвоните в <функцию>) , чтобы оценить их; они возвращают текстовую информацию.

my-dir

Этот макрос возвращает путь к последнему включенному make-файлу, который обычно текущий каталог Android.mk . my-dir полезен для определения LOCAL_PATH в начале файла Android.mk . Например:

  LOCAL_PATH: = $ (вызвать my-dir)
  

Из-за того, как работает GNU Make, этот макрос действительно возвращает путь к последний make-файл, который система сборки включила при разборе сценариев сборки. Для по этой причине вы не должны вызывать my-dir после включения другого файла.

Например, рассмотрим следующий пример:

  LOCAL_PATH: = $ (вызвать my-dir)

#... объявить один модуль

включить $ (LOCAL_PATH) / foo / `Android.mk`

LOCAL_PATH: = $ (вызвать my-dir)

# ... объявить другой модуль
  

Проблема здесь в том, что второй вызов my-dir определяет LOCAL_PATH как $ PATH / foo вместо $ PATH , потому что это было самое последнее включение указал.

Вы можете избежать этой проблемы, добавив дополнительные включения после всего остального. в файле Android.mk . Например:

  LOCAL_PATH: = $ (вызвать my-dir)

#... объявить один модуль

LOCAL_PATH: = $ (вызвать my-dir)

# ... объявить другой модуль

# extra includes в конце файла Android.mk
включить $ (LOCAL_PATH) /foo/Android.mk
  

Если невозможно структурировать файл таким образом, сохраните значение параметра первый вызов my-dir в другую переменную. Например:

  MY_LOCAL_PATH: = $ (вызвать my-dir)

LOCAL_PATH: = $ (MY_LOCAL_PATH)

# ... объявить один модуль

включить $ (LOCAL_PATH) / foo / `Android.mk`

LOCAL_PATH: = $ (MY_LOCAL_PATH)

#... объявить другой модуль
  

all-subdir-makefiles

Возвращает список файлов Android.mk , расположенных во всех подкаталогах папки текущий путь my-dir .

Эту функцию можно использовать для предоставления иерархии каталогов с глубоким вложением для система сборки. По умолчанию NDK ищет файлы только в каталоге. содержащий файл Android.mk .

this-makefile

Возвращает путь к текущему make-файлу (из которого система сборки вызвала функция).

родительский make-файл

Возвращает путь к родительскому make-файлу в дереве включения (путь к make-файл, содержащий текущий).

файл сборки-прародителя

Возвращает путь к родительскому make-файлу в дереве включения (путь к make-файл, содержащий текущий).

импортный модуль

Функция, позволяющая найти и включить файл Android.mk модуля с помощью название модуля.Типичный пример выглядит следующим образом:

  $ (вызов модуля импорта, <имя>)
  

В этом примере система сборки ищет модуль с тегом в список каталогов, на которые ссылается ваша среда NDK_MODULE_PATH ссылки на переменные и автоматически включает файл Android.mk .

8. Архитектура Makefile

8.

Makefile Архитектура

make отлично, если все работает — вы набираете gmake install и вот! в правильные вещи компилируются и устанавливаются в нужных местах.Наш цель состоит в том, чтобы это происходило часто, но почему-то часто этого не происходит; вместо этого в конечном итоге появляется какое-то странное сообщение об ошибке недра каталога, о существовании которого вы не знали.

Цель этого раздела — дать вам дорожную карту помочь вам разобраться, что идет правильно, а что идет неправильный.

Отладка Makefile s — это что-то вроде черное искусство, но вот пара хитростей, которые мы находим особенно полезно. Следующая команда позволяет увидеть содержимое любой переменной make в контексте текущего Makefile :

 $ make show VALUE = HS_SRCS 

где вы можете заменить HS_SRCS на имя любой переменной, значение которой вы хотите увидеть.

GNU make имеет параметр -d , который генерирует дамп процедуры принятия решения, используемой для получения заключения о том, какие файлы следует перекомпилировать. Иногда полезно для отслеживание проблем с лишним или отсутствующим перекомпиляции.

Для начала давайте посмотрим на Makefile для воображаемого маленького Проект fptools , малый . Каждый проект в fptools имеет свой каталог. в FPTOOLS_TOP , поэтому маленький проект будет иметь свой каталог FPOOLS_TOP / small / .Внутри Каталог small / будет Makefile , выглядит примерно так это:

 # Makefile для проекта fptools "small"

TOP = ..
включить $ (TOP) /mk/boilerplate.mk

SRCS = $ (подстановочный знак * .lhs) $ (подстановочный знак * .c)
HS_PROG = маленький

include $ (TOP) /target.mk 

, этот Makefile содержит три разделы:

  1. Первый раздел включает [2] файл «шаблонного» кода с уровня выше (который в этом случае будет FPTOOLS_TOP / мк / шаблон.мк ). Как следует из названия, cabinplate.mk состоит из большого количества стандартных Makefile код. Мы обсуждаем это Шаблон более подробно см. в Раздел 8.5, «Основной файл mk / cabinplate.mk ».

    Перед тем, как включить выписку , вы должен определять переменную make ТОП быть каталогом, содержащим mk каталог, в котором находится шаблон .мк файл есть. Это не . Нормально просто сказать

     include ../mk/boilerplate.mk # NO NO NO 

    Почему? Потому что шаблон .mk файлу необходимо знать, где он находится, чтобы он, в свою очередь, включает других файлов. (К несчастью, когда включает файл d, включает , имя файла трактуется как относительное в каталог, в котором находится gmake run, а не каталог, в котором включает сидений.) В основном, каждый файл foo.mk предполагает что $ (ТОП) /mk/foo.mk относится к себе. Это зависит от Makefile выполняет включите , чтобы убедиться, что это так.

    Файлы, предназначенные для включения в другие Makefile записаны так, чтобы следующее свойство: после foo.mk — это , включая d, он оставляет TOP , содержащий то же значение как это было незадолго до , включают Заявление .В нашем примере этот инвариант гарантирует, что включает для target.mk будет смотреть так же каталог, как и для cabinplate.mk .

  2. Второй раздел определяет следующий стандарт составляют переменных: SRCS (исходные файлы, из которых будет построено), и HS_PROG (исполняемый двоичный файл, который будет создан). Мы обсудим в подробнее, что такое «стандартные переменные», и как они влияют на происходящее — в Разделе 8.8, «Основной файл mk / target.mk ».

    В определении SRCS используется полезный GNU make construct $ (подстановочный знак $ pat $) , который расширяется до списка всех файлов, соответствующих шаблон пат в текущем каталоге. В в этом примере SRCS установлен в список всех .lhs и .c файлов в каталоге. (Давайте Предположим, есть по одному, Foo.lhs и Baz.c .)

  3. Последний раздел включает второй стандартный файл. код, называемый target.mk . Он содержит правила, которые говорят gmake , как сделать стандартные цели (Раздел 7.7, «Стандартные цели»). Почему, спросите вы, не может ли это стандартный код быть частью cabinplate.mk ? Хороший вопрос. Мы обсудим причину позже, в Раздел 8.4, «Шаблонная архитектура».

    У вас нет у вас на включает target.mk файл. Вместо этого вы можете написать собственные правила для всех стандартных целей. Как правило, тем не менее, вы найдете довольно большую отдачу от использования стандартные правила в target.mk ; Цена тег заключается в том, что вы должны понимать, что получают стандартные правила включены и что они делают (Раздел 8.8, «Основной файл mk / target.mk »).

В нашем примере Makefile большая часть работа выполняется двумя файлами include d. Когда вы говорите gmake все , следующие вещи произошло:

  • gmake выясняет, что объект файлы — Foo.o и Baz.o .

  • Он использует шаблонное правило шаблона для компиляции Foo.lhs до Foo.o с помощью компилятора Haskell.(Какой? Это установлено в конфигурация сборки.)

  • Он использует другое стандартное правило шаблона для компиляции Baz.c по Baz.o , с помощью компилятора C. (То же.)

  • Он связывает полученные файлы .o вместе, чтобы сделать small , используя Haskell компилятор, чтобы сделать шаг ссылки. (Почему бы не использовать ld ? Поскольку компилятор Haskell знает какие стандартные библиотеки подключать.Как gmake знает, как использовать компилятор Haskell для сделать ссылку, а не компилятор Си? Потому что мы установили переменная HS_PROG , а не C_PROG .)

Все файлы Makefile должны соответствовать указанным выше трехсекционный формат.

Более крупные проекты обычно делятся на несколько подкаталоги, каждый из которых имеет свои Makefile . (В очень больших проектах это подструктура может повторяться рекурсивно, хотя это редкий.) Чтобы дать вам представление, вот часть каталога структура для (довольно большого) проекта GHC:

 $ (FPTOOLS_TOP) / ghc /
  Makefile
  мк /
    Boilerplate.mk
    rules.mk
   документы /
    Makefile
    ... исходные файлы для документации ...
   Водитель/
    Makefile
    ... исходные файлы для драйвера ...
   компилятор /
    Makefile
    parser / ... исходные файлы для парсера ...
    renamer / ... исходные файлы для переименования ...
    ... и т.д ... 

Подкаталоги docs , Драйвер , компилятор и так далее, каждый содержит подкомпонент GHC, и каждый имеет свой собственный Makefile .Также должен быть Makefile в $ (FPTOOLS_TOP) / ghc . Он выполняет большую часть своей работы, рекурсивно вызывая gmake на Makefile s в подкаталогах. Мы говорим что ghc / Makefile — это не листовой файл . Makefile , потому что он мало что делает кроме организации своих детей, в то время как Makefile s в подкаталогах все лист Makefile s .(В Принципиально подкаталоги могут сами содержать нелистовой Makefile и несколько подкаталоги, но этого не происходит в GHC.)

Makefile в ghc / compiler считается листом Makefile , хотя ghc / compiler имеет подкаталоги, потому что сами эти подкаталоги не имеют Makefile s в им. Они просто привыкли структурировать набор модулей, составляющих GHC, но все управляются одним Makefile в ghc / компилятор .

Вы заметите, что ghc / также содержит каталог ghc / mk / . Это содержит Специфический для GHC Makefile шаблонный код. Точнее:

  • ghc / mk / cabinplate.mk включен вверху ghc / Makefile , и всего лист Makefile s в подкаталоги. Это в свою очередь включает с основной файл шаблона мк / шаблон.мк .

  • ghc / mk / target.mk есть включить d внизу ghc / Makefile , а всего лист Makefile в подкаталогах. Это в свою очередь включает s файл мк / target.mk .

Итак, эти два файла — место, где нужно искать для всего GHC настройка стандартного шаблона.

8.4 Архитектура котельной

Каждый Makefile включает шаблон.мк файл вверху и target.mk файл внизу. В этом разделе мы обсудим, что в этих файлов, и почему их должно быть два. В общем:

  • cabinplate.mk состоит из:

    • Определения миллионов составляют переменных , которые вместе укажите конфигурацию сборки. Примеры: HC_OPTS , параметры для передачи компилятору Haskell; NoFibSubDirs , подкаталоги для включения в нофиб проекта ; GhcWithHc , имя компилятора Haskell для использования при компиляции GHC в проекте ghc .

    • Стандартные правила шаблона , которые расскажите gmake , как построить один файл От другого.

    cabinplate.mk должен быть включает d наверху каждого Makefile , чтобы пользователь мог заменить стандартные определения или шаблонные правила на просто давая новое определение или шаблонное правило в Makefile . gmake просто принимает последнее определение как окончательное.

    Вместо вместо шаблона определения, также довольно часто Пополнение им. Например, Makefile может сказать:

     SRC_HC_OPTS + = -O 

    , тем самым добавив « -O » к конец SRC_HC_OPTS .

  • target.mk содержит сделать правил для стандартных целей описано в Разделе 7.7, «Стандартные цели». Эти правила включаются выборочно, в зависимости от настройки определенные составляют переменных. Эти переменные обычно устанавливаются в средней части Makefile между двумя включают с.

    target.mk необходимо включить в конец (вместо того, чтобы быть частью cabinplate.mk ) для нескольких утомительных причины:

    • gmake фиксирует цель и списки зависимостей раньше, чем следовало бы.Например, target.mk имеет правило, которое выглядит вот так:

       $ (HS_PROG): $ (OBJS)
            $ (HC) $ (LD_OPTS) $ <-o $ @ 

      Если это правило было в cabinplate.mk тогда $ (HS_PROG) а также $ (OBJS) не имели бы своих окончательных значений на данный момент gmake обнаружил правило. Увы, gmake делает снимок их текущие значения и связки, которые делают снимок с правилом.(Напротив, команды, выполняемые, когда правило «Пожары» только заменяются на данный момент стрельбы.) Итак, правило должно следовать определениям дается в самом Makefile .

    • В отличие от шаблонных правил, обычные правила не могут быть отменять или заменять последующими правилами для того же target (по крайней мере, без сообщения об ошибке). Включая обычные правила в шаблон.mk предотвратит пользователь от написания правил для конкретных целей в конкретных случаи.

    • Есть еще пара причин, по которым я забыли, но это не имеет особого значения.

8.5. Основной

mk / cabinplate.mk файл

Если посмотреть $ (FPTOOLS_TOP) /mk/boilerplate.mk вы обнаружите, что он состоит из следующих разделов, каждый хранится в отдельном файле:

конфиг.мк

- это файл конфигурации сборки, который мы обсуждали на length в Раздел 7.3, «Получение желаемой сборки».

paths.mk

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

Следующие переменные могут быть установлены в Makefile , чтобы повлиять на автоматический поиск исходного файла осуществляется:

ALL_DIRS

Установить список каталогов для поиска дополнение к текущему каталогу для источника файлы.

EXCLUDED_SRCS

Установить список исходных файлов (относительно текущий каталог) исключить из автоматического поиск.Механизм поиска источников - умный достаточно, чтобы знать, что если вы исключите исходный файл из которых берутся другие источники, то производные источники также должны быть исключены. Для Например, если вы установите EXCLUDED_SRCS включить Foo.y , затем Foo.hs также будет Исключенный.

EXTRA_SRCS

Установить список дополнительных исходных файлов (возможно, в каталогах, не указанных в ALL_DIRS ), который должен быть считается.

Результаты автоматического поиска исходного файла помещены в следующие переменные make:

SRCS

Все исходные файлы найдены, отсортированы и без дубликаты, в том числе те, которые могут не существовать пока что, но будет получен из других существующих источников. SRCS банка быть при необходимости переопределить, и в этом случае переменные ниже будет следовать их примеру.

HS_SRCS

все исходные файлы Haskell в текущем каталог, в том числе полученные из других источников файлы (например, счастливые источники также дают начало Haskell источники).

HS_OBJS

Объектные файлы, полученные из HS_SRCS .

HS_IFACES

Интерфейсные файлы (.привет файлов) производный от HS_SRCS .

C_SRCS

Найдены все исходные файлы C.

C_OBJS

Объектные файлы, полученные из C_SRCS .

SCRIPT_SRCS

Найдены все исходные файлы скриптов ( файлов .lprl ).

SCRIPT_OBJS

«объектных» файлов, полученных из SCRIPT_SRCS (.prl файлов).

HSC_SRCS

Все исходные файлы hsc2hs ( файлов .hsc ).

HAPPY_SRCS

Все исходные файлы happy (Файлы .y или .hy ).

OBJS

конкатенация $ (HS_OBJS) , г. $ (C_OBJS) и $ (SCRIPT_OBJS) .

Любое или все эти определения могут быть легко переопределить, давая новые определения в вашем Makefile .

Что именно делает paths.mk считать «исходным файлом»? Это основано в суффиксе файла (например, .hs , .lhs , .c , .hy и т. Д.), Но это своего рода детали, которые меняются, поэтому вместо того, чтобы перечислять источник здесь достаточно, лучше всего заглянуть в путей.мк .

опц.мк

определяет делает переменных для опции строки для передачи каждой программе. Например, он определяет HC_OPTS , строки параметров для передачи компилятору Haskell. Видеть Раздел8.7, «Правила и параметры паттернов».

суффикс.mk

определяет стандартные правила шаблонов - см. Раздел 8.7, «Правила и параметры паттернов».

Любая из переменных и шаблонных правил, определенных шаблонный файл можно легко переопределить в любом конкретном Makefile , потому что шаблонный включают на первом месте. Определения после этого включить директиву просто переопределить значение по умолчанию в файле cabinplate.mk .

При сборке GHC интерес представляют три платформы:

Сборка Платформа

Платформа, на которой мы делаем эту сборку.

Хост платформа

Платформа, на которой будут работать эти двоичные файлы.

Целевая платформа

Платформа, для которой этот компилятор будет генерировать код.

Эти платформы устанавливаются при запуске настроить сценарий , используя - сборка , - хост и - цель опций. Модель mk / config.mk файл определяет несколько символов, связанных с настройками платформы (см. мк / конфиг.mk для подробностей).

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

Если хост и цель разные, то мы строим кросс-компилятор. Для GHC это означает компилятор который будет генерировать промежуточные файлы .hc для переноса на цель архитектура для начальной загрузки. Библиотеки и компилятор этапа 2 будут построены как файлы HC для целевой системы (подробности см. в Раздел 10, «Перенос GHC».

Более подробную информацию о том, когда использовать BUILD, HOST или TARGET, можно найти в комментарии в config.mk .

8.7.Правила и параметры шаблона

Файл суффикс.mk определяет стандартные правила шаблона , которые говорят, как построить один вид файла из другого, например, как создать файл .o из .c файл. (GNU делает правила шаблона более мощные и простые использовать, чем Unix , сделать суффикс правила .)

Практически все правила выглядят примерно так:

% .o:% .c
      $ (RM) $ @
      $ (CC) $ (CC_OPTS) -c $ <-o $ @ 

Вот как понять правило. Он говорит, что что-то .o (скажем Foo.o ) может быть построен из что-то .c ( Foo.c ), вызвав компилятор C (путь имя состоялось в $ (CC) ), переходя к нему опции $ (CC_OPTS) и зависимый файл правила $ < ( Foo.c дюйм в этом случае), и поместив результат в цель правила $ @ ( Foo.o в этом кейс).

Каждая программа проводится в серии переменная, определенная в mk / config.mk —просмотр в mk / config.mk для полного списка. Один важным является компилятор Haskell, который называется $ (HC) .

Опции каждой программы хранятся в вызывает переменных <программа> _OPTS _OPTS переменные определяется в мк / opts.mk . Почти все из них определяются так:

 CC_OPTS = \
  $ (SRC_CC_OPTS) $ (WAY $ (_ way) _CC_OPTS) $ ($ * _ CC_OPTS) $ (EXTRA_CC_OPTS) 

Четыре переменные, из которых CC_OPTS построен следующим образом значение:

SRC_CC_OPTS :

параметров, переданных всем компиляциям C.

WAY_ _CC_OPTS :

опции переданы компиляциям C для пути <путь> .Например, WAY_mp_CC_OPTS дает параметры для передачи компилятору C при компиляции т.п. . Переменная WAY_CC_OPTS удерживает параметры, передаваемые компилятору C при компиляции стандартный способ. (Раздел 8.10, «Управление путями» обсуждает многосторонняя компиляция.)

<модуль> _CC_OPTS :

параметры для передачи компилятору C, которые являются конкретными к модулю <модуль> .Например, SMap_CC_OPTS дает конкретные параметры, передаваемые компилятору C при компиляции SMap.c .

EXTRA_CC_OPTS :

дополнительные параметры для передачи всем компиляциям C. Этот предназначен для использования в командной строке, таким образом:

 $ gmake libHS.a EXTRA_CC_OPTS = "- v" 

8.8. Основной файл

mk / target.mk

target.mk содержит стандартные правила для все стандартные цели, описанные в Разделе 7.7, «Стандартные цели». Это осложняется тем, что что вы не хотите, чтобы все эти правила действовали в каждом Makefile . Вместо того, чтобы иметь множество крошечные файлы, которые можно включать выборочно, есть один файл, target.mk , который выборочно включает правила, основанные на том, определили ли вы определенные переменные в ваш Makefile . В этом разделе объясняется, что правила, которые вы получаете, какие переменные ими управляют и какие правила делать.Надеюсь, вы также получите достаточное представление о том, что должно случиться так, что вы можете читать и понимать любые странные частные случаи самостоятельно.

HS_PROG .

Если определено HS_PROG , вы получите правила со следующими целями:

HS_PROG

. Это правило связывает $ (OBJS) с Haskell система времени выполнения, чтобы получить исполняемый файл с именем $ (HS_PROG) .

установить

установить $ (HS_PROG) дюйм $ (биндир) .

C_PROG

аналогично HS_PROG , за исключением того, что ссылка на шаг ссылки $ (C_OBJS) с C исполняющая система.

БИБЛИОТЕКА

аналогична HS_PROG , за исключением того, что это ссылки $ (LIB_OBJS) для создания библиотека архив $ (БИБЛИОТЕКА) , и установить устанавливает его в $ (libdir) .

LIB_DATA

LIB_EXEC

HS_SRCS , C_SRCS .

Если определено HS_SRCS и непустой, правило для цели зависит включен, что генерирует информация о зависимостях для программ на Haskell. сходным образом для C_SRCS .

Все эти правила являются правилами с двойным двоеточием, таким образом

 install :: $ (HS_PROG)
      ...как установить ... 

GNU make обрабатывает правила с двойным двоеточием как отдельные сущности. Если есть несколько правил с двойным двоеточием для одну и ту же цель, которую он берет каждую по очереди и стреляет, если ее зависимости говорят об этом. Это означает, что вы можете Например, определите как HS_PROG , так и БИБЛИОТЕКА , которая сгенерирует два правила для установить . Когда вы набираете gmake install оба правила будут запущены, и обе программы и библиотека будет установлена, как вы и хотели.

В листе Makefile s переменная ПОДКЛЮЧЕНИЕ не определено. В не-листовом Makefile s, SUBDIRS занесен в список подкаталоги, содержащие подчиненные Makefile s. Это зависит от вас установить SUBDIRS в Makefile . Нет автоматики здесь - SUBDIRS слишком важен, чтобы автоматизировать.

Когда определено SUBDIRS , цель.mk включает довольно аккуратное правило для стандартные цели (Раздел 7.7, «Стандартные цели»), которые просто вызывает make рекурсивно в каждом из подкаталоги.

Эти рекурсивные вызовы гарантированно происходят в том порядке, в котором указан список каталогов в SUBDIRS . Эта гарантия может быть важным. Например, если вы скажете gmake boot может быть важно, чтобы рекурсивный вызов из сделать загрузку выполняется в одном подкаталоге (скажем, включаемые файлы) перед другим (исходными файлами).Как правило, сначала ставьте наиболее независимый подкаталог, а самый зависимый последний.

Иногда мы хотим построить практически ту же систему в несколькими разными «способами». Например, мы хотим построить GHC Prelude библиотеки с профилированием и без него, так что есть должным образом созданный архив библиотеки для связывания с, когда пользователь компилирует свою программу. Было бы возможно иметь полностью отдельное дерево сборки для каждого такого «пути», но это было бы ужасно бюрократическим, тем более что часто только части дерева сборки должны быть построены в нескольких способами.

Вместо этого target.mk содержит умную магию, позволяющую построить несколько версии системы; и локально контролировать количество версий построены и чем они отличаются. В этом разделе объясняется магия.

Файлы для определенного способа различаются по изменяя суффикс. «Нормальный путь» всегда построен, и его файлы имеют стандартные достаточные .o , .hi и т. Д. Кроме того, вы можете построить один или несколько дополнительных путей, каждый отличается меткой пути .Объект файлы и файлы интерфейса для одного из этих дополнительных способов: отличаются своим суффиксом. Например, способ mp есть файлы .mp_o и .mp_hi . Библиотечные архивы имеют свои способ пометить другую сторону точки, по скучным причинам; таким образом, libHS_mp.a .

A сделать переменной вызванной путь содержит тег текущего пути. путь всегда устанавливается только на командная строка gmake (обычно в рекурсивный вызов gmake система).Он никогда не устанавливается внутри Makefile . Так что это глобальная константа для любой вызов gmake . Два других составляют переменных, путь_ и _way являются производными от $ (путь) и никогда не менялся. Если путь не установлен, то и путь_ и _way , и вызов make построит «нормальный» способ".Если путь установлен, то другой две переменные установлены в симпатии. Например, если $ (путь) - это « mp », тогда way_ устанавливается на « mp_ » и _way настроен на « _mp ». Эти три переменные затем используется при построении имен файлов.

Итак, как делает рекурсивным? вызывается с помощью набора путь ? Есть два пути в котором это происходит:

  • Для некоторых (но не всех) стандартных целей, когда в листовом подкаталоге делает рекурсивно вызывается для каждого тега в $ (ПУТЬ) .Ты устанавливаешь ПУТЬ в Makefile в список тегов, которые вы хочу, чтобы эти цели были созданы для. Механизм здесь очень очень похоже на рекурсивный вызов превратится в в подкаталогах (Раздел 8.9, «Рекурсия»). Вам решать ПУТЬ в вашем Makefile ; вот как вы контролируете что пути будут построены.

  • Для полезного набора целей (например, libHS_mp.а , Foo.mp_o ) есть правило которое рекурсивно вызывает make , чтобы указанная цель, установив путь Переменная. Итак, если вы скажете gmake Foo.mp_o вы должны увидеть рекурсивный вызов gmake Foo.mp_o way = mp , и в этом рекурсивном вызове шаблонное правило для компиляции файла Haskell в .o файл будет соответствовать .Основные правила паттернов (в suffix.mk ) выглядят так:

    %. $ (Way_) o:% .lhs
          $ (HC) $ (HC_OPTS) $ <-o $ @ 

    Аккуратно, а?

  • Вы можете вызвать make с помощью конкретный способ настраиваю самостоятельно, в порядке для создания файлов, связанных с определенным путь в текущем каталоге. например.

     $ освободить дорогу = p 

    будет создавать файлы для способа профилирования только в текущем каталог.

8.11. Когда стандартное правило неверно

Иногда стандартное правило просто не работает правильно. Например, в пакете nofib нам нужен шаг по ссылке, чтобы распечатать информацию о времени. Что делать здесь , а не , чтобы определить HS_PROG или C_PROG , а вместо этого определите специальный целевое правило в вашем собственном Makefile . К используя разные имена переменных, вы избежите стандартных правил включены и противоречат вашему.

Ubuntu Manpage: mk - поддерживать (создавать) связанные файлы

Источник: 9base_6-6_amd64
 
НАИМЕНОВАНИЕ
       mk - поддерживать (создавать) связанные файлы

 
ОБЗОР
         mk  [ -f   mkfile ] ... [ option   ... ] [ target   ... ]

 
ОПИСАНИЕ
         Mk  использует правила зависимости, указанные в  mkfile , для управления обновлением (обычно
       компиляция)  нацелена на  (обычно файлы) из исходных файлов, от которых они зависят.В
         mkfile  (по умолчанию  содержит правило  для каждой цели, которая идентифицирует файлы и другие
       цели, от которых это зависит, и сценарий  sh  (1), рецепт  , чтобы обновить цель. В
       скрипт запускается, если цель не существует или если она старше любого из файлов, которые она
       зависит от.  Mkfile  может также содержать  мета-правила , которые определяют действия для неявного обновления
       цели. Если цель   не указана, цель первого правила (не метаправила) в
         mkfile  обновлен.Переменная среды  $ NPROC  определяет, сколько целей может быть обновлено одновременно;
       Некоторые операционные системы, например Plan 9, автоматически устанавливают  $ NPROC  на количество процессоров на
       текущая машина.

       Варианты:

         -a  Предположить, что все цели устарели. Таким образом, все обновлено.
         -d  [ egp ] Производить отладочную информацию ( p  для синтаксического анализа,  g  для построения графиков,  e  для
               исполнение). -e  Объясните, почему создается каждая цель.
         -i  Принудительное нанесение любых недостающих промежуточных целей.
         -k  Выполнять как можно больше работы перед лицом ошибок.
         -n  Печатать, но не выполнять команды, необходимые для обновления целей.
         -s  Задайте аргументы командной строки последовательно, а не параллельно.
         -t  Коснуться (обновить дату изменения) файловых целей без выполнения каких-либо рецептов. -w   target1  ,   target2, ... 
               Представьте, что время изменения для каждой цели   - текущее время; полезно в сочетании
               с  -n , чтобы узнать, какие обновления будут запускаться при изменении  целей .

       mkfile 
        mkfile  состоит из  назначений  (описанных в разделе «Среда») и  правил . Правило
       содержит  целей  и  хвостовых .Цель - это буквальная строка, обычно являющаяся именем файла.
       Хвост содержит ноль или более  предварительных требований  и необязательный рецепт  , который представляет собой оболочку  
       сценарий. Каждая строка рецепта должна начинаться с пробела. Правило принимает форму

              цель: prereq1 prereq2
                        рецепт   с использованием  prereq1, prereq2  to   build  target

       Когда рецепт выполняется, первый символ в каждой строке опускается.После двоеточия в целевой строке правило может указывать  атрибутов , описанных ниже.

       Метаправило   имеет цель вида  A  %   B , где  A  и  B  являются (возможно, пустыми) строками. А
       метаправило действует как правило для любой потенциальной цели, имя которой совпадает с  A  %   B  с заменой % 
       произвольной строкой, называемой стержнем  .При интерпретации метаправила основа
       заменены на все вхождения %  в предварительных именах. В рецепте мета-
       По правилу, переменная среды  $ stem  содержит строку, совпадающую с % . Например,
       мета-правило для компиляции программы на C с использованием  9c  (1) может быть таким:

              %:% .c
                      9c -c $ stem.c
                      9l -o $ стержень $ стержень.o

       Мета-правила могут содержать амперсанд  и , а не знак процента % .%  соответствует максимальному
       длина строки из любых символов;  и  соответствуют строке максимальной длины из любых символов
       кроме точки или косой черты.

       Текст  mkfile  обрабатывается следующим образом. Строки, начинающиеся с  <, за которыми следует файл
       name заменяются содержимым указанного файла. Строки, начинающиеся с  <| , за которым следует
       имя файла заменяется результатом выполнения указанного файла.Пустые строки
       и комментарии, которые начинаются с символов  #  без кавычек до следующей новой строки, удаляются.
       Последовательность символов обратная косая черта-новая строка удаляется, поэтому длинные строки в  mkfile  могут быть
       в сложенном виде. Строки без рецепта обрабатываются заменой  `{  command  }  на вывод команды
         команда  при запуске  sh . Ссылки на переменные заменяются значениями переменных.Специальные символы могут быть заключены в одинарные кавычки  '' , как в  sh  (1).

       Присваивания и правила выделяются первым некотируемым вхождением :  (правило) или  = .
       (назначение).

       Более позднее правило может изменить или переопределить существующее правило при следующих условиях:

       - Если цели правил точно совпадают и одно правило содержит только предварительное условие
              предложение и без рецепта, предложение добавляется к предпосылкам другого правила.Если одна или обе цели являются виртуальными, рецепт всегда выполняется.

       - Если цели правил точно совпадают, а предпосылки не совпадают, и
              оба правила содержат рецепты,  mk  сообщает об ошибке `` неоднозначный рецепт ''.

       - Если цель и предпосылки обоих правил точно совпадают, второе правило
              отменяет первое.

     Окружающая среда 
       Правила могут использовать переменные среды оболочки.Юридическая справка формы  $ OBJ  или
         $ {name}  расширяется как  sh  (1). Ссылка вида  $ {имя:   A  %   B   =   C% D} , где  A,   B,   C, 
         D  - (возможно, пустые) строки, имеет значение, образованное расширением  $ name  и заменой  C 
       для  A  и  D  для  B  в каждом слове в  $ name , которое соответствует шаблону  A  %   B .Переменные могут быть заданы назначениями формы
                 var =  [ attr = ]  значение 
       Пробелы в значении   разбивают его на слова. Такие переменные экспортируются в среду.
       рецептов по мере их выполнения, если не присутствует  U , единственный допустимый атрибут  attr . В
       начальное значение переменной берется из (в порядке возрастания приоритета) значения по умолчанию
       значения ниже, среда  mk ,  mkfiles  и любое назначение командной строки как
       Аргумент к  мк .Аргумент присваивания переменной переопределяет первый (но не любой
       последующее) присвоение этой переменной.

       Переменная  MKFLAGS  содержит все аргументы опции (аргументы, начинающиеся с или
       содержащий и  MKARGS  содержит все цели в вызове  mk .

       Переменная  MKSHELL  содержит командную строку оболочки , которую mk  использует для запуска рецептов. Если первый
       слово команды заканчивается на  rc  или  rcsh ,  mk  использует правила цитирования  rc  (1); в противном случае он использует
         sh  (1) s.Переменная  MKSHELL  используется при чтении mkfile, а не при его чтении.
       выполняется, так что в одном mkfile можно использовать разные оболочки:

              MKSHELL = $ PLAN9 / bin / RC
              использование-rc: V:
                   for (i in a b c) echo $ i

              MKSHELL = sh
              use-sh: V:
                   для i в a b c; сделать echo $ i; сделано

       Mkfiles включены через  < или  <|  ( q.v.) видят свою личную копию  MKSHELL , которая всегда
       начинается с  sh  .

       Динамическая информация может быть включена в mkfile с помощью строки формы

              <|  команда   аргументы 

       Это запускает команду  command  с заданными аргументами  args  и направляет стандартный вывод
       до  mk  для включения как часть mkfile. Например, ядра Inferno используют это
       техника для запуска команды оболочки с awk-скриптом и файлом конфигурации в качестве аргументов
       чтобы сценарий  awk  обработал файл и вывел набор переменных и их
       ценности. Казнь 
       Во время выполнения  mk  определяет, какие цели необходимо обновить и в каком порядке строить.
        имен , указанные в командной строке. Затем он запускает связанные рецепты.

       Цель считается актуальной, если для нее нет предварительных условий или если все предварительные условия
       обновлены и новее, чем все необходимые для этого требования. Когда-то рецепт цели
       выполнено, цель считается актуальной.

       Штамп даты, используемый для определения актуальности цели, вычисляется по-другому для
       разные типы мишеней.Если целью является  виртуальных  (цель правила с  V 
       атрибут), его отметка даты изначально равна нулю; при обновлении цели ставится отметка даты.
       установлен на самую последнюю отметку даты его предварительных условий. В противном случае, если цель не
       существует как файл, его отметка даты установлена ​​на самую последнюю отметку даты его предварительных условий,
       или ноль, если для этого нет предпосылок. В противном случае целью является имя файла и
       отметка даты цели всегда является датой изменения этого файла.Штамп даты вычисляется
       когда цель необходима при выполнении правила; это не статическое значение.

       Несуществующие цели, которые имеют предпосылки и сами являются предпосылками, обрабатываются
       специально. Такой цели  t  дается отметка даты самого последнего предварительного условия, и если
       это приводит к тому, что все цели, которые имеют  т  в качестве предварительного условия, будут обновлены,  т  является
       считается актуальным. В остальном  т  производится обычным способом.Флаг  -i  отменяет
       это особое лечение.

       Файлы могут быть созданы в любом порядке, соблюдающем предыдущие ограничения.

       Рецепт выполняется путем подачи рецепта в качестве стандартного ввода для команды  / bin / sh .
       (Обратите внимание, что в отличие от  make ,  mk  передает весь рецепт в оболочку, а не запускает каждый
       строку рецепта отдельно.) Окружение дополняется следующими переменными:

         $ alltarget  все цели этого правила. $ newprereq  предварительные требования, которые привели к выполнению этого правила.

         $ newmember  предварительные условия, которые являются членами агрегата, который вызвал это правило
                     выполнять. Когда предпосылки правила являются членами совокупности,
                       $ newprereq  содержит имя агрегированного и устаревшего членов, а
                       $ newmember  содержит только имена участников.

         $ nproc  - слот процесса для этого рецепта.Он удовлетворяет 0≤  $ nproc  < $ NPROC .

         $ pid  идентификатор процесса для  mk , выполняющего рецепт.

         $ prereq  все предпосылки для этого правила.

         $ stem , если это метаправило,  $ stem  - это строка, которая соответствует %  или  и . Иначе,
                     он пуст. Для мета-правил регулярных выражений (см. Ниже) переменные
                     установлены в соответствующие подвыражения. $ target  цели для этого правила, которые необходимо изменить.

       Эти переменные доступны только во время выполнения рецепта, но не во время оценки.
        mkfile .

       Если правило не имеет атрибута  Q , рецепт печатается перед выполнением с
       узнаваемые переменные среды расширены. Команды, возвращающие статус ошибки, вызывают  mk  to
       прекратить.

       Рецепты и команды  rc  с обратной кавычкой в ​​таких местах, как назначения, выполняются в копии  mk 
       среда; изменения, которые они вносят в переменные среды, не видны из  mk .Подстановка переменных в правиле выполняется при чтении правила; подстановка переменных в
       рецепт готов, когда рецепт выполнен. Например:

              bar = a.c
              foo: $ bar
                      $ CC -o foo $ bar
              bar = b.c

       скомпилирует  b.c  в  foo , если  a.c  новее  foo .

     Агрегаты 
       Имена формы  a  ( b ) относятся к элементу  b  совокупности  a .В настоящее время единственный
       Поддерживаются архивы  9ar  (см.  9c  (1)).

     Атрибуты 
       Двоеточие, отделяющее цель от предварительных условий, может сразу сопровождаться
         атрибуты  и еще одно двоеточие. Атрибуты:

         D  Если рецепт выходит с ненулевым статусом, цель удаляется.

         E  Продолжить выполнение, если рецепт содержит ошибки.

         N  Если рецепта нет, время цели обновляется. n  Правило - это метаправило, которое не может быть целью виртуального правила. Только файлы
              соответствовать образцу в мишени.

         P  Символы после  P  до конца :  принимаются как имя программы. Это
              будет вызываться как  sh   -c   prog   'arg1'   'arg2'  и должен возвращать нулевой статус выхода, если
              и только если arg1 обновлен относительно arg2.Штампы даты все еще
              размножается обычным способом.

         Q  Рецепт не печатается перед выполнением.

         R  Правило - это метаправило, использующее регулярные выражения. Как правило, %  не имеет особого
              имея в виду. Цель интерпретируется как регулярное выражение, как определено в
                регулярное выражение  (7). Предварительные требования могут содержать ссылки на подвыражения в форме  \   n ,
              как в замещающей команде  sed  (1). U  Цели считаются обновленными, даже если рецепт этого не сделал.

         V  Цели этого правила помечены как виртуальные. Они отличаются от файлов
              одно и то же имя.

 
ПРИМЕРЫ
       Простой mkfile для компиляции программы:

               грамматиками yacc  (1). Файл  lex.c  включает файл  x.tab.h 
       вместо  y.tab.h , чтобы отразить изменения в содержании, а не только время модификации.

              lex. $ O: x.tab.h
              x.tab.h: y.tab.h
                      cmp -s x.tab.h y.tab.h || cp y.tab.h x.tab.h
              y.tab.c y.tab.h: грамм.у
                      $ YACC -d грамм.лет

       В приведенном выше примере можно также использовать атрибут  P  для правила  x.tab.h :

              x.tab.h: Pcmp -s: y.tab.h
                      cp y.tab.h x.tab.h

 
ИСТОЧНИК
         / SRC / cmd / мк 

 
СМОТРЕТЬ ТАКЖЕ
         sh  (1),  регулярное выражение  (7)

       А. Хьюм, `` Mk: A Successor to Make '' (Десятое издание Research Unix Manuals).Эндрю Г. Хьюм и Боб Фландрена, `` Ведение файлов по плану 9 с помощью Mk ''.
       DOCPREFIX / doc / mk.pdf

 
ИСТОРИЯ
       Эндрю Хьюм написал  mk  для Tenth Edition Research Unix. Позже он был перенесен на Plan 9.
       Это программное обеспечение является переносом версии Plan 9 обратно на Unix.

 
ОШИБКИ
       Идентичные рецепты для мета-правил регулярных выражений имеют только одну цель.

       Кажущийся подходящим ввод, например  CFLAGS = -DHZ = 60 , анализируется как ошибочный атрибут;
       исправьте это, вставив пробел после первого

       Рецепты, напечатанные  mk  перед передачей в оболочку для выполнения, иногда
       ошибочно расширен для печати.Не верьте тому, что напечатано; полагаться на то, что оболочка
       делает.

                                                                                       МК (1план9)
 

MK11 Рецепты кузницы Krypt Guide

Расходные материалы Состав
Амулет потерянных душ (x10) - для подъема противников Рунический камень некроманта Сталь Outworld
Катана предков (x10) Элемент заказа Горсть флюса
Ясень Врбада (x10) - дымовая шашка Пламя дракона Подвесной Osh-Tekk Sunlight
Клубок свернувшейся крови (x10) Свернувшаяся кровь вампира Кристаллический осколок
Нож-бабочка Черного дракона (x10) - для вызова Кано Обсидиановый осколок Сталь Outworld Комплект схем
Черный серп (x10) Свернувшаяся кровь вампира Кристаллический осколок Синтетическое волокно
Окровавленный Сай (x10) Свернувшаяся кровь вампира Шелк Krypt Spider
Окровавленная тонфа (x10) Горсть флюса Шкура Тайгорра
Ярость в бутылке (x10) - пожертвуйте здоровьем, чтобы получить бафф урона Гром в бутылке Дистиллированная ярость таркатана Пламя дракона
Сломанный колчан (x10) - для оглушения противников Чешуя змеи Сущность утраченной души
Заряженное Cyber ​​Core (x10) - для вызова Мороза Заряженные конденсаторы Ядро питания Потертая проводка
Charged Knuckle Duster (x10) - шокировать противников Комплект схем Медное покрытие Гром в бутылке
Корона падшего принца (x10) - для поднятия / захвата противников Сущность Эдемской магии Сущность утраченной души
Cyber ​​Communicator (x10) - чтобы поднять противников Комплект схем Материнская плата
Cyber ​​Snare (x10) - для разделения противников Медное покрытие Потертая проводка
Генератор электрического поля (x10) - для создания электрической ауры Заряженные конденсаторы Заряженные конденсаторы Сталь Outworld
Электрифицированный Такухацугаса (x10) - для вызова Райдена Гром в бутылке Заряженные конденсаторы Синтетические волокна
Вечный песок (x10) - для вызова Гераса Гром в бутылке Искра Древнего Бога Искра Древнего Бога
Ethereal Armor (x10) - повышение защиты Элемент заказа Сущность Эдемской магии Медное покрытие
Fists of Cold Steel (x10) - удары, чтобы заморозить противников Сущность холода Крипт Шелк паука
Вспышка граната (x10) Угольно-пленочный резистор Медное покрытие
Force Ball (x10) - подбрасывать противников Чешуя змеи Подвесной Osh-Tekk Sunlight
Frost Core Fragment (x10) - получить иммунитет ко льду Powered Core Комплект схем
Тыква восьми бессмертных (x10) - для оглушения противников Медное покрытие Искра Древнего Бога
Самонаводящаяся ракета (x10) Потертая проводка Миниатюрный заряд взрывчатого вещества
Медальон Куая (x10) - для вызова Саб-Зиро Медное покрытие Кютинн плевок Кожаные полоски
Китинн Феромоны (x10) - для вызова Д'воры Свернувшаяся кровь вампира Кордит Кютинн плевок
Lightning Resistance (x10) - уменьшить электрический урон Заряженные конденсаторы Сталь Outworld Гром в бутылке
Взрывчатые вещества, заполненные жидким азотом (x10) - чтобы заморозить противников Кордит Миниатюрный заряд взрывчатого вещества
Lit Shades (x10) - для вызова Джонни Кейджа Золотая руда Комплект схем Кристаллический осколок
Повязка Лю Канга (x10) - для вызова Лю Канга Пламя дракона Элемент заказа Медное покрытие
Meteorite Core (x10) - для поджигания противников Метеоритная пыль Сталь Outworld
Napalm Missiles (x10) - для поджигания противников Комплект схем Миниатюрный заряд взрывчатого вещества
Камень Пустоты Магнуса (x10) Пламя дракона Черный порошок Кристаллический осколок
Драгоценный камень Нитары (x10) - для уменьшения урона до 50% Свернувшаяся кровь вампира Кордит Элемент заказа
Руна некроманта (x10) - броня Рунический камень некроманта Костная пыль
Ядовитые когти (x10) - для истощения выносливости Мешок затеррана с ядом Кютинн плевок
Полированные жетоны (x10) - для вызова Джакса Черный порошок Медное покрытие Золотая руда
Прототип электроракет (x10) Непрерывный предохранитель Потертая проводка Миниатюрный заряд взрывчатого вещества
Противотанковая граната (x10) Заряженный конденсатор Комплект схем
Излучатель луча красного дракона (x10) Угольно-пленочный резистор Круговой пучок
Сюрикен Рэйко (x10) Гром в бутылке Outworld Steel
Блок памяти Робо-Сек (x10) - для вызова Сектора Заряженные конденсаторы Ядро питания Потертая проводка
Мешок серебряных долларов (x10) - для вызова Эррона Блэка Черный порошок Земляная пыль Сталь Outworld
Камень жертвоприношения (x10) - для вызова Котала Кана Шкура Тайгорра Костная пыль Могильный грунт
Отрубленная рука Шиннока (x10) - отбросить противников назад Костная пыль Подвесной Osh-Tekk Sunlight
Отрезанная голова (x10) Могильный грунт Рунический камень некроманта
Щит живого пламени (x10) - чтобы стать невосприимчивым к пламени Магма Царства Пустоты Магма Царства Пустоты Пламя дракона
Осколок жизни (x10) - дает + 25% здоровья Свернувшаяся кровь вампира Элемент заказа Медное покрытие
Печать Красного Дракона (x10) - для уменьшения энергетического урона Магма Царства Пустоты Дистиллированная ярость таркатана Угольно-пленочный резистор
Серебряный дракон (x10) - для вызова Кунг Лао Гром в бутылке Обсидиановый осколок Outworld Steel
Коммуникатор спецназа (x10) - для вызова Кэсси Кейдж Ядро питания Комплект схем Медное покрытие
Радио спецназа (x10) Потертая проводка Комплект схем Медное покрытие
Генератор статического щита (x10) - чтобы стать невосприимчивым к электричеству Заряженные конденсаторы Заряженные конденсаторы Угольно-пленочный резистор
Кунаи Такэды (x10) Синтетическое волокно Горсть флюса
Текунин Экстренный приемник (x10) - для вызова Сайракса Потертая проводка Угольно-пленочный резистор Комплект схем
Transmute Hearts (50) - дает 50 сердец Свернувшаяся кровь вампира Свернувшаяся кровь вампира Элемент заказа
Трансмутация монет (5000) - дает 5000 сердец Золотая руда Золотая руда Медное покрытие
Transmute Souls (250) - дает 250 сердец Сущность утраченной души Сущность утраченной души Некроматический рунический камень
Шип тремора (x10) Метеоритная пыль Магма Царства Пустоты
Модернизированные военные ботинки (x10) - для вызова Жаки Горсть флюса Медное покрытие Комплект схем
Ракета с ядом (x10) для истощения выносливости Кютинн плевок Миниатюрный заряд взрывчатого вещества
Артефакт бога воды (x10) - отбрасывает / замораживает противников Искра Древнего Бога Горсть флюса

20 вопросов к хаус-продюсеру MK

Здесь продюсер рассказывает о тех первых днях в Детройте, о возрождении хаус-музыки в настоящее время и многом другом.

1. Где вы сейчас находитесь в мире и какова обстановка?

Я искренне рад сообщить, что я дома в Калифорнии и смотрю на экран своего компьютера и клавиатуру в своей уютной студии.

2. Какой первый альбом или музыкальное произведение вы купили для себя и на каком носителе?

Kiss, Alive II , на виниле.

3. Чем ваши родители зарабатывали на жизнь, когда вы были ребенком, и что они думают о том, чем вы зарабатываете сейчас?

У моего отца был магазин одежды в Детройте, а моя мама была дома, мама заботилась о нас, детях.После магазина одежды мой папа работал продавцом автомобилей. К сожалению, несколько лет назад моя мама скончалась. Они оба сказали мне, и мой отец до сих пор говорит мне, как они оба гордятся моими личными и профессиональными достижениями.

4. Какую песню вы написали первой?

Хммм. Я начал писать песни, когда мне было около 14 лет. Я не помню, как назывался самый первый, но могу сказать вам, что первый, который я написал и выпустил, назывался «First Bass».

5.Если бы вам пришлось порекомендовать один альбом тем, кто хочет увлечься танцевальной музыкой, что бы вы им дали?

Принц, 1999 . Да я серьезно.

6. Что вы купили в первую очередь для себя, когда начали зарабатывать деньги как ди-джей?

Новый дом, студия и SSL.

7. Какую последнюю песню вы слушали?

«Baby Shark»

8. Какую песню вы бы хотели спродюсировать?

Могу честно сказать, что никогда не говорил себе: «Хотел бы я это сделать.Вместо этого я говорю: «Я собираюсь спродюсировать такую ​​песню».

9. Что вы думаете о нынешнем возрождении хаус-музыки?

Мне нравится, что так много людей со всего мира наслаждаются душой и глубокими звуками, которые проникают в дом. Все дело в том, чтобы почувствовать это. Музыка - такая важная сила в жизни, по крайней мере, в моей жизни и жизни моих друзей. Удивительно видеть, как он растет. Это такое приятное чувство.

10. Чем отличается место, в котором вы выросли, и как оно на вас повлияло?

Я вырос в Детройте и его окрестностях, и к тому времени, когда я был подростком, я зависал в студии KMS с Кевином Сондерсоном, Хуаном Аткинсом и такими, как Деррик Мэй, Карл Крейг и UR (Underground Resistance).Это было совершенно нереально. Это сформировало меня, потому что меня взяли под их крыло, и уроки, которые они охотно давали, формировали меня до сегодняшнего дня.

11. Какое первое танцевальное музыкальное шоу действительно поразило вас?

Наверное, был на раннем рейв-шоу или электронном шоу в Детройте. Пытаюсь вспомнить, был ли это Inner City, Moby, Mr. Fingers, Depeche Mode или Frankie Knuckles. Наверное, все.

12. В декабре прошлого года вы писали в Instagram о том, что у вас много мыслей о критике, которую получают продюсеры за создание вокального хауса.Какие из этих мыслей?

Причина, по которой я написал это, состоит в том, что я в основном защищал Camelphat. Они написали в Твиттере, что нас ненавидят за продюсирование вокальных хаус-песен, но я думал, что когда мы идем в студию писать песню с вокалом, все, что мы пытаемся сделать, это сделать что-то отличное. Как будто люди рассердились из-за того, что «Кола» или «Комната паники» так хорошо справились.

13. Что вы делаете в первую очередь, возвращаясь в свой номер в отеле после шоу?

Это зависит от того, в какой части мира я нахожусь.Иногда я собираю вещи, если у меня ранний рейс, или звоню друзьям, если они не спят на другом конце планеты.

14. Что самое безумное, что вы когда-либо видели в толпе во время одного из ваших сетов?

Девочки танцуют на плечах своих парней, сбрасывая топы в воздух. Что-нибудь еще, я беру пятую.

15. В каком городе вам больше всего нравится играть?

Совершенно несправедливый вопрос. Я беру пятый или придерживаюсь более безопасного ответа, как Детройт.Все знают, что я люблю Великобританию, Ирландию, Канаду, Ибицу, Австралию и многие другие. Да, я знаю, что это страны, но этот вопрос все равно что спросить кого-то, кто из их детей им больше всего нравится.

16. Вы сыграли несколько прямых трансляций с начала карантина. Что вы можете посоветовать профессиональному стримингу?

Если честно, я все еще к этому привыкаю. Я не уверен, что кто-то из нас, ди-джеев, еще не понял это. Нам всем очень нравится атмосфера игры в многолюдных залах.

17. Что самое захватывающее в современной танцевальной сцене?

Для меня хаус-музыка наконец-то действительно нашла свое применение в Штатах. Кроме того, я вижу так много свежих новых талантов из Великобритании и Германии, Ирландии, Испании, и все так сотрудничают. Мне действительно кажется, что мы немного сплоченное сообщество.

18. Как вы совмещаете свою карьеру с отцовством?

Это требует тщательного планирования и составления графиков, поэтому я могу перемещаться туда и обратно как можно больше.

19. Какие из ваших ритуалов перед выступлением?

Я всегда стараюсь приехать на место встречи хотя бы на час раньше. Мне нужно уловить атмосферу комнаты

20. Один совет, который вы могли бы дать себе в молодости?

Делайте то, что любите, и не паникуйте, все будет хорошо

Arts & Heritage Alliance MK

Посмотрите видеоролик MAKE. Создано с участием детей из начальной школы Brooklands Farm и начальной школы Two Mile Ask.При поддержке MK City Discovery Center: https://www.youtube.com/watch?v=hd9g_Hv0p98&feature=youtu.be

Представьте мир, в котором наши дети растут, не испытывая искусства, поэзии, драмы, танец, музыка…

Представьте города, поселки и деревни, лишенные сообществ с творческими способностями и вдохновение…

Назад в 2013 году Совет по искусству Англии (ACE) выразил обеспокоенность сокращающимся обязательство включить культурное образование в учебную программу. Мало того, что каждый ребенок имеет право познавать искусство и культуру, но преимущества участие в культурной деятельности влияет на психическое и физическое благополучие, дает новые взгляды на мир и повышать передаваемые навыки, такие как общение и творческое мышление.В ответ на этот кризис ACE поддержала Объединить организации для создания партнерств в области культурного образования в различных населенных пунктов для удовлетворения потребностей в культурном образовании, характерных для данной области. Из Эту инициативу организация "Мост для Юго-Востока" Artswork поддержала развитие MAKE.

СДЕЛАТЬ (Milton Keynes Arts Education) - призыв к действию для детей и молодежи. в Милтон-Кейнсе и тех, кто с ними работает и заботится о них. Вместе мы создать индивидуальную модель культурного образования, которое могло произойти только в Милтоне Кейнс, для наших детей и молодежи.

MAKE опубликовал совместную Культурное образование Стратегия основана на трех ключевых направлениях:

  1. Более счастливые, здоровые, молодые люди
  2. Изучение, открытие и создание возможностей для инклюзивного и экологически безопасного творчества
  3. Карьера, навыки и возможности

С 2015 MAKE построила мощности и сети, соответствующие этим направлениям. Работа увеличил количество приемов премий Arts Awards более чем 2000 детей и молодых человек, и 33 школы в Милтон-Кейнсе подписались на Artsmark путешествие.

СДЕЛАТЬ стремится создать город, полный творческих мыслителей. По мере развития Милтон Кейнс важно, чтобы город генерировал инновации и творчество в своих экономика и культурное предложение. Зажигание творческого мышления через культурные образование вдохновляет новые поколения, которые будут оснащать город прогрессивным навыки, необходимые для достижения успеха, с помощью нашего самого мощного и захватывающего ресурса - наших дети и молодежь.

СДЕЛАТЬ изменение. Сделать разницу. Сделать это в прошлом.

Электронная почта hello @ aha-mk.org, если у вас есть вопросы о благотворительных инициативах MAKE.

СДЕЛАТЬ Социальные сети

Следуйте за нами в Instagram: https://www.instagram.com/makemiltonkeynes/

Следуйте за нами на Facebook: https://www.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *