использование setenv в make-файле - PullRequest
0 голосов
/ 18 октября 2011

Я пытаюсь использовать переменную setenv в моем make-файле, но когда я выполняю свой make-файл, он дает команду setenv: not found.

Как я могу это использовать?

На самом деле я хотел запустить скрипт оболочки, который устанавливает несколько переменных среды.

Поскольку список очень большой, у меня нет выбора, кроме как использовать сценарии. Я не могу установить их вручную, как abcd: = / xx / yy / zz

Пожалуйста, предложите.

P.S. та же команда setenv xxx yyy очень хорошо работает в оболочке он просто не работает, когда я использую в makefile напрямую или makefile со скриптом, имеющим эту команду. «

Ответы [ 5 ]

3 голосов
/ 18 октября 2011

Запуск сценария для установки переменной среды не будет работать, так как оболочка запускает отдельный процесс и не будет отражаться в вашей текущей оболочке. Вам потребуется source скрипт оболочки. Вы можете использовать source или . в зависимости от вашей оболочки. Ниже приведен пример для вашей ссылки, где setvar.sh устанавливает переменную & print.sh печатает ее; в Makefile (mkfile) файл setvar.sh создается с использованием .

$ cat setvar.sh 

export TEST=ABC 

$ cat print.sh 

echo $TEST
$ cat mkfile
test:
    . ./setvar.sh && ./print.sh

.SILENT:test
$ make -f mkfile
ABC

Вы также можете include Я думаю, например,

$ cat mkfile2 
include setvar.sh
test:
    ./print.sh

.SILENT:test
$ make -f mkfile2
ABC

Надеюсь, это поможет!

3 голосов
/ 18 октября 2011

Почему вы не используете команду экспорта?

0 голосов
/ 07 апреля 2016
export MY_VAR := "/package/your_path"
0 голосов
/ 19 октября 2011

Я думаю, что setenv не встроен в оболочку sh. Если вы используете GNU Make, это оболочка по умолчанию. В вашей ситуации вы, вероятно, захотите использовать другую оболочку, например bash. Вы делаете это, устанавливая переменную SHELL в make-файле так, как вам нужно:

SHELL := /usr/bin/bash

Для получения более подробной информации о покупке это раздел руководства по GNU Make. Он подробно описывает различное поведение переменной SHELL и то, как она вызывается или не наследуется от оболочки, вызываемой на разных платформах.

РЕДАКТИРОВАТЬ: Я согласен с выводом других авторов, что вы, вероятно, не устанавливаете переменные окружения так, как вы думаете, и не будете использовать команду setenv в. Я просто отвечаю на ваш оригинальный вопрос. Чтобы узнать о переменных в проверке make-файлов , эти другие разделы в руководстве по GNU Make.

0 голосов
/ 18 октября 2011
...