Сайт использует сервис веб-аналитики Яндекс Метрика с помощью технологии «cookie». Пользуясь сайтом, вы даете согласие на использование данной технологии.
Makefile для новичков: пара приёмов и общий настрой использования в небольших C-проектах
Как можно сформулировать задачу для make и решить её чтением требований справа налево. Что делает % и другие кракозябры, как шаблонизировать цели, где в Makefile следы препроцессора и почему нам нужно научиться читать мысли Ричарда Столлмана дцатилетней давности. Бонусом — книжка «Создание встраиваемых систем» в зеркальном отражении. Таймлайн: 00:01 Вступление и книжка про встраиваемые системы 01:13 Зачем нужен шаблонный проект на C 01:57 Когда проект выходит за рамки одного файла 02:31 Make — декларативный язык, а не просто скрипт 03:40 Проблема одинаковых имён объектных файлов 05:00 Визуализация структуры проекта через схемы 06:33 Mermade и техника "рисуй проблему" 07:19 Идея: путь к C-файлу как уникальный идентификатор 08:53 Пример линковки программы и библиотеки 10:01 Преобразование пути в уникальное имя object-файла 11:18 Используем путь в имени — два бонуса 12:30 Переход к make-файлу: декларативный стиль 13:19 Приём "читать справа налево" в Make 14:05 Пример: превращаем .c в .o через шаблоны 16:06 Первая make-задача на практике 17:07 Как работает подстановка в make (проценты и звёздочки) 18:52 Обработка правил как препроцессинг 20:06 Ещё пример: basename, встроенные функции make 21:04 Проверка: как работают переменные в make 22:11 Замена слэшей на подчёркивания в путях 23:06 Сохраняем путь в имени object-файла 24:03 Проверка: как правильно задать зависимости 25:00 Хак: подстановка пути в шаблон 26:10 Компилируем из подкаталога и шифруем путь 27:08 Используем функцию sub и вложенные вызовы 28:13 Генерация object-файлов с уникальными именами 29:08 Создаём несколько object-файлов и проверяем make 30:06 Добавляем хедер, компилируем с зависимостью 31:14 Линкуем несколько object-файлов 32:12 Создание простых исполняемых целей 33:44 Вопрос: что если в пути есть подчёркивания? 34:45 Проблема одинакового списка зависимостей для разных целей 35:51 Разделение списков зависимостей по целям 36:41 Используем функции suffix для генерации 37:50 Ошибка: пустое имя переменной — и как это исправить 39:01 Проверка: работает ли addsuffix и make 40:57 Всё получилось — теперь разный список зависимостей 42:05 Хочется шаблон: переменная → правила 43:36 Проблема: нельзя вычислять имя переменной в зависимости 44:55 Выход: создаём шаблон правила и подставляем значения 46:03 Создание make-правила с параметром через шаблон 47:37 Проверка: make генерирует правильные цели 48:47 Автоматизация: используем массив и цикл 50:00 Проверка: всё работает через eval 51:12 Что мы узнали — ключевые выводы 52:23 Как формулировать требования к make-файлу 53:18 Использование функций call и eval 55:04 Ошибка с подстановками и как её исправить 56:16 Добавляем кавычки: let it be literal 58:03 Финальная проверка: создаются ли цели по шаблону 1:00:04 Обнаружение глупой ошибки — неправильное имя цели 1:01:12 Всё работает: шаблон превращается в реальные правила 1:02:50 Автоматическая генерация множества целей 1:03:52 Итоги: как рисование и анализ требований помогает 1:04:47 Как работает препроцессинг в make 1:05:59 Заключение: список часто используемых переменных 1:07:14 Как запоминать переменные и не забывать функции 1:08:22 Финальные советы и прощание Конспект на Github: