Вычисления переменной Make-файла на присвоении

Я часто пишу сценарии или командные строки, которые по существу похожи на это, если я хочу:

  1. Запущенный программа, которая неуязвима для регистраций
  2. , Который полностью разъединяется от оболочки, которая мечет икру, это, и
  3. Производит файл журнала из stderr и stdout, содержание которого отображено также, но
  4. , Позволяет мне прекращать просматривать происходящий журнал и делать, другой материал, не разрушая рабочий процесс

Обладает.

nohup java com.me.MyProgram </dev/null 2>&1 | tee logfile.log &
17
задан abernier 16 September 2009 в 22:31
поделиться

1 ответ

Зависит от марки. В GNU Make вы можете использовать : = вместо = , как в

TMP:=$(shell mktemp -d /tmp/.XXXXX)

Edit Как указал Новелократ, назначение = отличается от : = присвоение в значениях, присвоенных с помощью = , будет оцениваться во время подстановки (и, таким образом, каждый раз, когда используется переменная), тогда как : = присвоенные переменные их значения будут оцениваться только один раз (во время присваивания), и, следовательно, значения будут фиксированы после этого. См. документацию GNU Make для более подробного объяснения.

Однако, чтобы значение было действительно постоянным после присваивания, оно не должно содержать никаких частей, которые могут быть особенными для оболочки (которая делает вызовы для фактического выполнения правил обновления и т. д.) В частности, лучше избегать обратных кавычек. Вместо этого используйте встроенную функцию оболочки GNU make и аналогичные для достижения своих целей.

32
ответ дан 30 November 2019 в 11:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: