Многофайловая сборка
Сначала про настройку окружения
.dircolors; grep; man; PS1
vim: цветовые схемы, *~-файлы, vimbackup
zsh/bash: раскраска командной строки, алиасы
- велосипедный парк
- ???
Сборка из нескольких файлов
- Зачем много файлов?
- Быстрее компилировать не все
- Проще ориентироваться
- Си: пространства имён!
пример
- Скомпилировать сразу все файлы?
- (пере)компиляция только изменённых
Компиляция до .o
(повтор: сложность компоновки вручную с помощью ld)
Make
Проблемы многофайловой сборки: вручную муторно, сценарий делает много лишнего
- Перекомпиляция только обновлённых исходников
- Построение графа зависимостей и подграфа пересборки
- Удаление генератов
В том числе того, что разработчик считает генератом
- Скриптование / code reuse приёмов сборки
- в т. ч. уникальных для проекта
ТАБУЛЯЦИИ!
Gnu make
(есть много, но этот популярнее всех остальных, вместе взатых)
- Цели и рецепты
Как правило «как создать файл из других файлов» (например, prog.o из prog.c)
Вариант: «как создать файл определённого типа из других файлов другого определённого типа» (например .o из .c
- Командный интерпретатор ОС в качестве языка сценариев (как правило, shell)
- ⇒ нужен shell под системы без shell
- Переменные
- Специальные переменные
- Подстановка
- Отложенное и немедленное присваивание
- Много правил по умолчанию
- … (что успеем)
Литература по GNU Make
Очень старый учебник по старому Make (зато подробный и с объяснениями)
Книга Владимира Игнатова Эффективное использование GNU Make
Пример
См. FrBrGeorge/MakefileExample
(не успели) Другие низкоуровневые системы сборки
Ориентированные на ЯП и особенности сред программирования Apache_Ant/Apache_Maven (Java), Cabal (Haskell), ASDF (Lisp/CLisp), Boost.Build…
∃ Более высокий уровень — инструменты генерации сборочных сценариев (+окружение, +варианты сборки, +параметризация, +…), об этом после
Д/З
Прочитать и (по возможности) прощёлкать учебник по Make (про интеграцию с SCCS можно не читать). Есть ли отличия в поведении от GNU Make?
TODO Д/З на Makefile и многофайловый проект