07. Функции

Функции В make есть встроенные функции (в новых версиях make можно создавать свои) синтаксис $(function arg1, arg2…argN) аргументы разделяются запятыми Данные рисунки нашел на просторах интернета, весьма подробное описание есть в книжке по make https://www.gnu.org/software/make/manual/make.pdf функции для имен файлов на 91стр (103 стр pdf)

06. Циклы

Циклы В make циклы представлены одним лишь foreach, который проверяет все элементы из списка синтаксис $(foreach var,list,text) Над каждым словом (переменная var) в списке слов из list будет выполнятся действие (text) Пример: find_files = $(wildcard $(dir)/*) #параметр/шаблон поиска dirs := a b c d #некоторые директории #пройдем по всем директориям и каждую проверит по шаблону […]

05. Операторы ветвления if else

Операторы ветвления if else Операторы ветвления (условные конструкции) используются для принятия выбора в зависимости от внешних параметров или исполняемого кода. синтакис: условие выполняется если выполнилось условие else выполняется если не выполнилось условие endif пример: ifeq ($(test), ON) [tab] #command1 … [tab] #commandN else [tab] @echo Failed endif Условные директивы ifeq(arg1, arg2) #if equal ifneq(arg1, arg2) […]

03. Шаблонные правила

Шаблонные правила Шаблонные правила указывают как из файлов с расширением .x получить .y при помощи команды command. Чтобы отменить шаблонное правило – надо определить шаблонное правило без команды Чтобы Отключить действие всех суффиксов правил используется директива .SUFFIX: общий вид %.x : %.y [tab] command Например отменим создание объектных файлов для .c файлов %.o : %.c […]

04. Переменные

Переменные В имени переменных обычно используются заглавные буквы, цифры и подчеркивания, НЕЛЬЗЯ использовать # = : Пример объявления переменной TARGET TARGET = mainfile обращение: $(TARGET) = — переменная вычисляется каждый раз при обращении (рекурсивно вычисляемая) := — переменная вычисляется 1 раз при присваивании (как define) (только в GNU) Ссылка с заменой: пусть есть SOURCES=main.cpp file1.cpp […]

01. Состав makefile

Состав makefile Makefile состоит из правил, переменных и директив Команды: Перед командой используется знак табуляции Перенести длинную команду/переменные и тд можно с помощью знака “\” Команды выполняются когда изменились зависимости (когда файлы от которых зависит цель новее чем сама цель) @ — указывает НЕ выводить команду в терминал — (тире) перед командой указывает игнорировать ошибки […]

02. Зависимости у целей. Неявные правила

Зависимости у целей Для сборки целей нужно выставить зависимости – т.е. прописать от чего зависит цель (файлы .cpp и .h) Если зависимости проставлены, то может использоваться инкрементальная компиляция (т.е. не происходит повторной компиляции АКТУАЛЬНЫХ данных) что ускоряет сборку. Актуальность проверяется по времени изменения. Т.е. если исходники старее чем собранный файл – то не производится пересборка. […]

Абстрактная цель .PHONY

Абстрактная цель .PHONY Цель может быть абстрактной/ложной/фоновой т.н. phony targets – она не создает файлы пример: .PHONY : clean #clean является абстрактной целью clean: [tab] @rm -rf $(TARGET) *.o .PHONY запрещает выполнение неявных правил. Т.е. в данном примере make не ищет файлы clean.c clean.cpp и т.д.

00. Введение в make

Make- основные сведения make — утилита предназначенная для автоматизации преобразования файлов из одной формы в другую. Используется в Linux и является встроенной системой сборки. Для описания файлов и правил преобразования используется файл/скрипт makefile.   На самом деле в linux makefile может собираться при помощи целой группы утилит (Autotools) На их выходе получаются скрипт configure и […]

Commit — быстрое создание своего образа

Commit — быстрое создание своего образа Иногда для простой работы с докерами достаточно произвести изменения в интерактивном режиме и «сохранить» эти изменения. Использование Dockerfile или volumes в этом случае м.б. не оправдано, для этого можно внести изменения и «закоммитить» его как обычный git проект. Минус ланного подхода в большем числе слоев и большем объеме docker […]