mk-configure – легковесная альтернатива GNU autotools
Алексей Чеусов, Invention Machine corp., Минск, Беларусь
В феврале 2009 года в результате очередного “обсуждения” ;-) в одной из эхоконференций сети FIDO различных вопросов, связанных со сборкой программных проектов, как то “чей make лучше”, “так почему всё-таки autotools”, “чем плох и хорош make” и прочих веселых вопросов я решил, что пришло время реализовать свои идеи и представления об идеальной с моей точки зрения системе сборки ПО что называется “в железе”. Вот так, в ответ на вопрос “Зачем слова? Вы мне покажите…”, родился еще один проект с открытым исходным кодом, один из десятков тысяч других таких же, и имя его mk-configure (иногда я называю его mk-c или даже mkc). Целью и задачей проекта является, ни много ни мало, составить конкуренцию таким известным и популярным проектам, как GNU autotools, scons, CMake, а также другим, менее популярным, но решающим все ту же задачу — сборку программного проекта и установку его на систему пользователя для дальнейшего использования.
Наиболее часто задаваемый мне вопрос — “Зачем?”. И действительно, зачем? Проектов аналогичного назначения — масса. К тому же “GNU autotools прекрасно у всех работает. Зачем что-то еще?” ©. Я не стану отвлекаться на тему, насколько хорошо работает GNU autotools, и как много этих “всех”. В качестве ответа приведу маленький пример кода из NetBSD, который в определенном смысле и явился первопричиной… Думаю, большинству пользователей операционных систем с открытым исходным кодом, и даже пользователям закрытых коммерческих ОС известна программа GNU grep. Она входит в состав практически каждого Linux дистрибутива, является частью базовых систем NetBSD, OpenBSD, FreeBSD и многих других. Программистам, связанным с UNIX-подобными системами, хорошо известно, что в качестве системы сборки GNU grep использует GNU autotools. Менее известный факт, но о котором хорошо знают пользователи BSD систем: процессом сборки в BSD управляет по большому счету одна программа, make, и центральным элементом дерева исходного кода этих систем являются Makefile-ы. Вот как выглядит src/usr.bin/grep/Makefile в NetBSD (по умолчанию в NetBSD-5 используется GNU grep).
==============================================
# !http://www.codecogs.com/png.latex?\textstyle%20NetBSD:%20Makefile,v%201.2%202006/05/15%2021:12:21%20rillig%20Exp!
PROG= grep
SRCS= binary.c file.c grep.c mmfile.c queue.c util.c
LINKS= !http://www.codecogs.com/png.latex?\textstyle%20%7BBINDIR%7D/grep!{BINDIR}/egrep \
!http://www.codecogs.com/png.latex?\textstyle%20%7BBINDIR%7D/grep!{BINDIR}/fgrep \
!http://www.codecogs.com/png.latex?\textstyle%20%7BBINDIR%7D/grep!{BINDIR}/zgrep \
!http://www.codecogs.com/png.latex?\textstyle%20%7BBINDIR%7D/grep!{BINDIR}/zegrep \
!http://www.codecogs.com/png.latex?\textstyle%20%7BBINDIR%7D/grep!{BINDIR}/zfgrep
MLINKS= grep.1 egrep.1 \
grep.1 fgrep.1 \
grep.1 zgrep.1 \
grep.1 zegrep.1 \
grep.1 zfgrep.1
LDADD= -lz
WARNS= 4
.include <bsd.prog.mk>
==============================================
Я убежден в том, что даже начинающий UNIX-программист легко поймет без документации, что написано в этом Makefile-е и для чего. Просто? Конечно! И каким образом это “собирается”? Где правила компиляции и связывания, установки и чистки мусора? Всё, что необходимо для разработки, сборки и установки программы, находится в библиотечном файле bsd.prog.mk. И единственной программой необходимой для сборки является команда make(1) NetBSD. На мой взгляд именно так и должны выглядеть инструкции по сборке программного проекта: кратко, понятно, описательно, настолько, насколько это возможно. Можно сравнить самостоятельно это решение с тем, что мы имеем в GNU grep. bsd.prog.mk вместе с другими bsd.*.mk библиотечными файлами часто называют Mk файлами или скриптами. К сожалению, набор Mk скриптов NetBSD не лишен недостатков. Он изначально не был расчитан на разработку программного обеспечения вне NetBSD. То же относится и к
Mk файлам из FreeBSD и OpenBSD. Основная область их применения — базовые системы соответствующих ОС. Кроме того, они не предоставляют никакой функциональности для анализа программного окружения (аналога GNU autoconf), а это крайней важно для разработки переносимого ПО. Перспектив по развитию проекта в данном направлении тоже заметно не было. Поэтому, взяв за оcнову Mk files из NetBSD и NetBSD make, я и начал разработку проекта. Насколько удачно у меня получилось — судите сами.
Материалы к докладу
- Сайт: http://sourceforge.net/projects/mk-configure/
- Презентация: Просмотреть Загрузить
- Видео: Загрузить