Сборочные зависимости
- Библиотеки и инструменты сборки
- Порядок сборки
Вручную
- Установим «всё»
- Полностью перекомпилируем все файлы
Недостатки:
Что такое «всё»?
Прядок?
=> Сценарий
Мальчик для битья (об стенку) по теме: GNU Hello
Make
- Зависимости и проверка старшинства
- Запуск shell-команд
- Правила по умолчанию
- Переменные, подстановки, .PHONY и прочее
+ самодельный configure
Кроссплатформенность?
Autotools
Генерация configure — autoconf
+ autoheader (сводный .h-файл найденного)
Автоматическое конструирование Makefile.in для autoconf — automake
Автоматическая проверка зависимостей в .h-файлах — autoscan
Переопределение процедур поиска для конкретной системы — aclocal
+ libtool для сборки библиотек и компиляции с ними
А попроще?
pkg-config — Только способ запуска gcc для .h и библиотек
SCons, Rake, Ant, Premake (прямо по википедии:)
CMake
- Аналог automake
- + Простой входной файл
- + Разные back-end-ы (Makefile, VC++-проект, XCode), ...
- - Собственный модули определения библиотек
- Поддержка out-of-tree сборки
Д/З
Сборать GNU Hello
Собрать пример из http://www.devexp.ru/2010/01/sborka-proektov-s-cmake-vvedenie/#more-42 (cmake_intro.zip)
Собрать первый пример из Учебника по curses/terminfo (добавить getch(); перед endwin();, иначе ничего не увидите)
Собрать пример из руководства по BISON (обратите внимание, что вместо cc -lm -o rpcalc rpcalc.tab.c надо писать cc rpcalc.tab.c -lm -o rpcalc, так как -lm должна следовать после имени всех файлов.
- Написать Makefile для сборки.
Для тех, кому было просто
- Добиться отсутствия разноверсицы autotools при сборке GNU Hello
Пример cmake_intro.zip не совсем правильный (каталог build нельзя удалять). Переделать пример в чистую out-of-tree сборку
- Написать CMAKE для примера с BISON
Материалы
Старый-престаhый и потому короткий учебник по make ( ВНИМАНИЕ! Скорее всего вы будете иметь дело с GNU Make, у файлов которой местами другой синтаксис)
Учебник по GNU Make, руководство (руководство -- это просто info make)
http://www.linux.org.ru/books/GNU/automake/automake-ru_toc.html
http://www.linux.org.ru/books/GNU/autoconf/autoconf-ru_toc.html
Картинка по autotools: