Переменные
В имени переменных обычно используются заглавные буквы, цифры и подчеркивания, НЕЛЬЗЯ использовать # = :
Пример объявления переменной TARGET
TARGET = mainfile
обращение:
$(TARGET)
= — переменная вычисляется каждый раз при обращении (рекурсивно вычисляемая)
:= — переменная вычисляется 1 раз при присваивании (как define) (только в GNU)
Ссылка с заменой:
пусть есть
SOURCES=main.cpp file1.cpp file2.cpp
хотим получить объектные файлы (по сути файлы из SOURCES, но с расширением .o)
OBJECTS=$(SOURCES:.cpp=.o)
Автоматические переменные:
$@ — имя цели
$< — имя первой зависимости
$? — имена всех зависимостей, которые новее цели с пробелами между ними
$^ — имена всех зависимостей, с пробелами между ними
Переменная VPATH
VPATH определяет список путей поиска
Например VPATH = src inc — позволяет указать ПАПКИ в которых искать файлы
разделитель – пробел или двоеточие
Переменная vpath (маленькими) (только в GNU)
vpath %.h headers
указывает что ВСЕ файлы с расширением .h лежат в папке headers