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 […]