Это зависит от вкуса марки. С GNU Make, вы можете использовать :=
вместо =
как в
TMP:=$(shell mktemp -d /tmp/.XXXXX)
Редактировать Как отметил Novelocrat, то =
назначение отличается от :=
назначения в том, что значения, назначенные с помощью =
будут оценены во время замены (и, таким образом, , каждый раз используется переменная), тогда как назначенные переменные будут иметь свои значения, оцененные только один раз (во время назначения), и, следовательно, после этого значения фиксируются. См. documentation GNU Make для более подробного объяснения.
Для того, чтобы значение действительно было постоянным после назначения, оно не должно содержать частей, которые могут быть специальными для оболочки (которые вызываются make
, чтобы фактически запускать правила обновления и т. Д.). В частности , backticks лучше избегать. Вместо этого используйте встроенную функцию оболочки GNU make
и аналогичную для достижения ваших целей.
Переменные, присвоенные '=', оцениваются при каждой подстановке. Переменные, назначенные с помощью:: =, оцениваются при назначении, как вам хочется. – Novelocrat
Hi Dirk, Это не работает: http://pastie.org/619606 Есть ли синтаксическая ошибка в моем Makefile? Thanks – abernier
Отредактированный ответ еще раз. Я думаю, проблема заключается в использовании обратных сигналов; для make значение (в том числе обратные) по существу является «постоянным» и будет вставлено так же, как и в момент использования, - и тогда обратные выходы будут отображаться оболочкой в каждой точке использования. Однако теория. – Dirk