${_+_} в Makefile BSD

Я нашел ${_+_} в файле Makefile FreeBSD.

Что означает ${_+_} в файлах Makefile BSD?


person Vincent Lee    schedule 01.04.2013    source источник
comment
Я могу сказать вам, что голый + в начале командной строки в Makefile означает выполнение этой команды даже в режиме -n. Найденная вами конструкция, похоже, как-то связана с этим. Вполне возможно, что _+_ — это просто необычное имя для переменной, предназначенное для установки либо в +, либо в пустое (Make позволяет поместить в имя переменной почти что угодно), но я не вижу, где это установить где угодно, так что это, насколько я могу получить.   -  person zwol    schedule 01.04.2013


Ответы (1)


${_+_} относится к переменной. Он определен в share/mk/sys.mk который считывается процессом make. Таким образом, пользователь Zack указал в своем комментарии правильное направление; эта переменная расширяется до знака + в некоторых случаях, в зависимости от флагов, заданных для make:

.if !empty(.MAKEFLAGS:M-n) && ${.MAKEFLAGS:M-n} == "-n"
_+_     ?=
.else
_+_     ?=  +
.endif

Обоснование этого можно найти в комментарии к этой фиксации и этот, где был введен символ:

Make make recurse into sub-directories and sub-makes when given
two -n flags.  If only one -n flag is given the old behaviour
is retained (POLA).
person Reinier Torenbeek    schedule 01.04.2013
comment
Спасибо за добрые ответы :) - person Vincent Lee; 02.04.2013