Отправить env в целевой файл makefile

Я пытаюсь установить env var, который является git sha1 commit для цели makefile. Я устанавливаю много env vars, и только это терпит неудачу без такой ошибки файла или каталога. Я чертовски сбит с толку. Пожалуйста, помогите мне передать это как env var моей цели makefile. Это то, что я делаю в начале своего Makefile.

SHA1 := $(shell git log | head -1 | awk '{print }')
BUILD_STAMP := $(shell date +%s)
export SHA1
export BUILD_STAMP

и одна из целей makefile имеет такой вид.

target: dep-target
     env 
              VAR1=$(VAR1) 
              GIT_SHA1=$(SHA1) 
     my-command for the target

Это не удается с

env: a6d23d14b0fbb613e567cc647ebfe2808ce47af1: No such file or directory

пожалуйста, помогите мне это как ОКР ВАР.

5
задан Medhamsh
источник

2 ответов

 VAR1=$(VAR1)
 GIT_SHA1=$(SHA1)

круглые скобки, скобки, используемые с $ непосредственно перед ними таким образом вызовет текст между скобками, которые будут отправлены в Баш в командной строке, чтобы попытаться выполнить.

заменить фигурными скобками, т. е. GIT_SHA1=${SHA1} и вы будете получать переменной присваивания.

3
отвечен Hannu 2016-12-26 14:45:02
источник

У меня недостаточно репутации, чтобы прокомментировать неправильный ответ @Hannu (фигурные и круглые скобки эквивалентны в Make).

чтобы отладить подобные вещи, создайте отдельный короткий Makefile и попробуйте сделать следующее:

SHA1 := $(shell git log | head -1 | awk '{print }')
all:
        echo "$(SHA1)"

Это показывает, что происходит, если SHA1 получает всю первую строку вывода журнала git, а не только SHA, и это включает пробелы. Расширенная команда env будет иметь недопустимый синтаксис.

в этом случае, знак доллара в команда awk должна быть удвоена (выведите $$2), так что расширяется до буквального знака доллара, а не как пустая переменная $(2).

1
отвечен Curt 2016-12-29 01:59:49
источник

Другие вопросы bash environment-variables git linux makefile