Почему необязательный '=' был добавлен в директиву define для gnu make 4? - PullRequest
0 голосов
/ 05 ноября 2018

Глядя на руководство по Gnu make 4.2 для Определение многострочных переменных , мы видим пример:

define two-lines =
echo foo
echo $(bar)
endef

и комментарий

За директивой define в той же строке следует имя определяемой переменной и оператор присваивания ( необязательный ), и ничего более.

Меня несколько раз отключали, включая необязательный =, а затем возникали (часто тонкие) проблемы при сборке на другой машине с использованием Gnu make 3.81. Конечно, я не должен использовать синтаксис 4.2 при запуске 3.81! Но я посчитал это легкой ошибкой, тем более что ни URL, ни содержимое 1 не указывают на то, какая версия документируется (вам нужно нажать Up 2 уровня, чтобы увидеть версию).

Итак, вернемся к моему вопросу: почему был введен опциональный =?

1 Ответ

0 голосов
/ 05 ноября 2018

Позволяет создавать макросы, используя все различные операторы присваивания. В частности это позволяет использовать:

define foo :=

, чтобы получить просто расширенную переменную, или

define foo ?=

для получения необязательно назначенной переменной и т. Д. В рамках этого вам разрешено использовать (избыточный)

define foo =

также.

...