Внутри моей env.sh:Передать переменную оболочки bash в Makefile?
export BIN="/home/user/stuff"
Внутри моей Makefile:
бла-бла
TARGET = filetobeinstalled
бла-бла
install:
cp $(TARGET) $(BIN)
Перед запуском make install
, я определяю свои env vars внутри моей оболочки bash следующим образом: source /home/user/env.sh
. Я дважды проверяю, что эти env vars работают, набрав в оболочке echo $BIN
, что я запускаю Makefile, что дает мне соответствующий ответ (/home/user/stuff
).
Итак, я пытаюсь передать $BIN
переменную, определенную в командной строке с source
, чтобы внутри моего Makefile, который ссылается $BIN
, но не определяет его. К сожалению, когда я бегу make install
, он не подхватывает $BIN
, как вы можете видеть на выходе
$ source /home/user/env.sh
$ echo $BIN
$ /home/user/stuff
$ make install
make[1]: Entering directory `/home/user/stufftoinstall'
cp filetobeinstalled
cp: missing destination file operand after `filetobeinstalled'
Try `cp --help' for more information.
make[1]: *** [install] Error 1
На линии, которая имеет cp filetobeinstalled
, я ожидал бы, чтобы забрать мой окр VARS устанавливается с помощью source
перед запуском make install
, так что строка должна читать cp filetobeinstalled /home/user/stuff
, но это не так.
Я нашел похожие posts и кусочки, разбросанные по межотражателям, но ничего окончательного для вышеупомянутой проблемы и/или ничего, что сработало до сих пор. Надеюсь, это не слишком очевидно, но мне все равно, как я определенно, Makefile-nubile.
Приветствия
Обычно 'make' интерпретирует переменные среды как значения по умолчанию для переменных' make' с тем же именем. Существует опция «-e» для изменения приоритета переменных среды. Проверьте, что вы получаете при вводе 'env | grep '^ BIN =' '. Если это ничего не показывает, вот почему 'make' жалуется. Если он показывает правильное значение для переменной среды 'BIN', я не уверен, что происходит. Возможно, нам нужно будет увидеть специальные правила в верхней части 'makefile'. –
Как 'env.sh' получить исходный код в вашей оболочке?Это не стандартный файл конфигурации, а Make использует 'sh', а не' bash', по умолчанию, так что возможно, что 'env.sh' не используется вашим Makefile. – chepner
@JonathanLeffler - yep, он выплевывает 'BIN =/home/user/stuff'. Какие части Makefile помогут? – Prophet60091