Это не совсем короткий подход, это скорее общий подход (хотя, когда есть десятки программ для проверки, это может быть и самый короткий подход).Он взят из моего проекта (префикс NA_
означает « N ot A utotools»).
Макрос общего назначения
dnl ***************************************************************************
dnl NA_REQ_PROGS(prog1, [descr1][, prog2, [descr2][, etc., [...]]])
dnl
dnl Checks whether one or more programs have been provided by the user or can
dnl be retrieved automatically. For each program `progx` an uppercase variable
dnl named `PROGX` containing the path where `progx` is located will be created.
dnl If a program is not reachable and the user has not provided any path for it
dnl an error will be generated. The program names given to this function will
dnl be advertised among the `influential environment variables` visible when
dnl launching `./configure --help`.
dnl ***************************************************************************
AC_DEFUN([NA_REQ_PROGS], [
m4_if([$#], [0], [], [
AC_ARG_VAR(m4_translit([$1], [a-z], [A-Z]), [$2])
AS_IF([test "x@S|@{]m4_translit([$1], [a-z], [A-Z])[}" = x], [
AC_PATH_PROG(m4_translit([$1], [a-z], [A-Z]), [$1])
AS_IF([test "x@S|@{]m4_translit([$1], [a-z], [A-Z])[}" = x], [
AC_MSG_ERROR([$1 utility not found])
])
])
m4_if(m4_eval([$# + 1 >> 1]), [1], [], [NA_REQ_PROGS(m4_shift2($*))])
])
])
Пример использования
NA_REQ_PROGS(
[find], [Unix find utility],
[xargs], [Unix xargs utility],
[customprogram], [Some custom program],
[etcetera], [Et cetera]
)
Так что в течение Makefile.am
вы можете сделать
$(XARGS)
или
$(CUSTOMPROGRAM)
и т. д.
Функции
- Он объявляет программы среди «влиятельных переменных среды», видимых приконечный пользователь запускает
./configure --help
, так что может быть предоставлен альтернативный путь к программе - Переменная bash с именем с тем же именем программы, но в верхнем регистре, содержащим путь, где находится программа,
- Ошибка возникает, если какая-либо из указанных программ не была найдена, и пользователь не указал для них альтернативный путь
- Макрос может принимать бесконечные (пары) аргументов
Когда вы должны его использовать
- Когда программы для тестированияТед очень важен для компиляции вашего проекта, так что пользователь должен иметь возможность указать для него альтернативный путь, и должна появиться ошибка, если хотя бы одна программа вообще не доступна
- Когда условие № 1 применяется кболее чем одна программа, в этом случае нет необходимости писать макрос общего назначения, и вы должны просто использовать собственный настраиваемый код