Утилиты в файлах Make
Запишите команды Makefile (и любые скрипты оболочки, такие как configure) для выполнения в sh (как в традиционной оболочке Bourne, так и в POSIX оболочке), а не в csh. Не используйте никакие специальные возможности ksh или bash, или POSIX возможности, не широко поддерживаемые в традиционной оболочке Bourne sh.
Скрипт configure и правила Makefile для построения и установки не должны напрямую использовать какие-либо утилиты, кроме этих:
awk cat cmp cp diff echo egrep expr false grep install-info ln ls mkdir mv printf pwd rm rmdir sed sleep sort tar test touch tr true
Программы сжатия, такие как gzip, могут быть использованы в правиле dist.
В целом, придерживайтесь широко поддерживаемых (обычно POSIX-определённых) опций и функций этих программ. Например, не используйте ‘mkdir -p’, как бы удобен он ни был, потому что некоторые системы его совсем не поддерживают, а на других он не безопасен для параллельного выполнения. Список известных несовместимостей см. в Программирование портативных оболочек в Autoconf.
Неплохо избегать создания символических ссылок в файлах Make, так как некоторые файловые системы их не поддерживают.
Правила Makefile для построения и установки также могут использовать компиляторы и связанные программы, но должны делать это через переменные make, чтобы пользователь мог подставить альтернативы. Вот некоторые из программ, которые мы имеем в виду:
ar bison cc flex install ld ldconfig lex make makeinfo ranlib texi2dvi yacc
Используйте следующие make переменные для запуска этих программ:
$(AR) $(BISON) $(CC) $(FLEX) $(INSTALL) $(LD) $(LDCONFIG) $(LEX) $(MAKE) $(MAKEINFO) $(RANLIB) $(TEXI2DVI) $(YACC)
Когда вы используете ranlib или ldconfig, убедитесь, что ничего плохого не произойдёт, если на системе нет соответствующей программы. Организуйте игнорирование ошибки от этой команды и выведите сообщение перед командой, чтобы сообщить пользователю, что неудача этой команды не означает проблему. (Макрос Autoconf ‘AC_PROG_RANLIB’ может помочь с этим.)
Если вы используете символические ссылки, вы должны реализовать резервный вариант для систем, которые не поддерживают символические ссылки.
Дополнительные утилиты, которые можно использовать через переменные Make, включают:
chgrp chmod chown mknod
Использование других утилит в частях Makefile (или скриптах), предназначенных только для определённых систем, где известно, что эти утилиты существуют, допустимо.
Copyright © 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Free Software Foundation, Inc.
Licensed under the GNU Free Documentation License.
https://www.gnu.org/software/make/manual/html_node/Utilities-in-Makefiles.html