Зачем использовать рекурсивные переменные только для простых имен команд оболочки? - PullRequest
0 голосов
/ 04 июня 2019

Я знаю разницу между простыми и рекурсивными переменными в make-файле.
Я видел много make-файлов (включая ядро ​​linux), которые используют рекурсивные переменные для простых имен команд оболочки.
Я думаю, что достаточно использовать простые переменные в этом случае.
Но большинство использует рекурсивные переменные.
Есть ли какие-то конкретные причины для использования рекурсивных переменных, чем простые?

CC = cc
AR = ar
RM = rm -f
DIFF = diff
TAR = tar
FIND = find
INSTALL = install
TCL_PATH = tclsh
TCLTK_PATH = wish
XGETTEXT = xgettext
MSGFMT = msgfmt
CURL_CONFIG = curl-config
PTHREAD_LIBS = -lpthread

1 Ответ

1 голос
/ 04 июня 2019

Есть ли какие-либо конкретные причины для использования рекурсивного переменные, чем простые?

Да: просто назначенные переменные являются расширением GNU make. Традиционный make не имеет этой функции, и он не указан в POSIX. Поэтому

  1. Использование обычных («рекурсивных») назначений более переносимо. Фактически, это единственная альтернатива, доступная в некоторых средах.
  2. Использование обычных заданий более традиционно.
  3. Использование обычных заданий - это просто, как много людей научилось это делать.
  4. Люди, которые работают в основном в средах, по умолчанию make не являющихся GNU make, могут даже не знать / не интересоваться простым назначением или другими расширениями GNU.

Кроме того,

  1. Использование только одной формы присваивания приводит к получению make-файла, который легче понять, и обычное присваивание имеет некоторые полезные свойства, которые могут побудить авторов make-файла выбрать этот вариант.

Возможно, есть и другие.

...