3

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

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

И одна из целей make-файла имеет это.

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

Это не с

env: a6d23d14b0fbb613e567cc647ebfe2808ce47af1: No such file or directory

Пожалуйста, помогите мне установить это как env var.

2 ответа2

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

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

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

1

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

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .