Отправить 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
пожалуйста, помогите мне это как ОКР ВАР.
2 ответов
VAR1=$(VAR1) GIT_SHA1=$(SHA1)
круглые скобки, скобки, используемые с $
непосредственно перед ними таким образом вызовет текст между скобками, которые будут отправлены в Баш в командной строке, чтобы попытаться выполнить.
заменить фигурными скобками, т. е. GIT_SHA1=${SHA1}
и вы будете получать переменной присваивания.
У меня недостаточно репутации, чтобы прокомментировать неправильный ответ @Hannu (фигурные и круглые скобки эквивалентны в Make).
чтобы отладить подобные вещи, создайте отдельный короткий Makefile и попробуйте сделать следующее:
SHA1 := $(shell git log | head -1 | awk '{print }')
all:
echo "$(SHA1)"
Это показывает, что происходит, если SHA1 получает всю первую строку вывода журнала git, а не только SHA, и это включает пробелы. Расширенная команда env будет иметь недопустимый синтаксис.
в этом случае, знак доллара в команда awk должна быть удвоена (выведите $$2), так что расширяется до буквального знака доллара, а не как пустая переменная $(2).
Другие вопросы bash environment-variables git linux makefile