Вызов сценария внешней оболочки внутри make-файла для установки переменных - PullRequest
1 голос
/ 14 сентября 2011

Посмотрите на следующий make-файл (который не работает) ...

export CC      = gcc
export CFLAGS  = -W -Wall -fPIC -m32

USER = $(DB_USER)
export USER

PASS = $(DB_PASS)
export PASS

SUBDIRS = libs dbserver

.PHONY: subdirs $(SUBDIRS)

subdirs: $(SUBDIRS)

$(SUBDIRS):
    $(MAKE) -C $@

Переменные DB_USER и DB_PASS определены в отдельном внешнем файле, conf.sh, например:

export DB_USER=<username>
export DB_PASS=<password>

Затем они требуются в make-файлах внутри SUBDIRS.

Если я запускаю . conf.sh в командной строке, а затем вызываю make, тогда USER и PASS присваиваются правильные значения, и компиляция выполняется отлично. Но я хочу вызвать conf.sh внутри make-файла, чтобы эти переменные могли быть установлены. Как я могу сделать это?

Ответы [ 2 ]

1 голос
/ 14 сентября 2011

Вы можете использовать:

$(SUBDIRS):
    . conf.sh; $(MAKE) -C $@ DB_USER="$${DB_USER}" DB_PASS="$${DB_PASS}"

Это предоставит пароль в командной строке, но выполнит работу.Обратите внимание на двойной доллар;эта часть оценивается оболочкой, а не make (поэтому фигурные скобки также необходимы).Я не уверен, что рекомендую его, но он должен работать.

Если подумать, вы, вероятно, можете избежать явной передачи параметров, поскольку скрипт conf.sh экспортирует их.Значения $DB_USER и $DB_PASS будут доступны подчиненному make в любом случае:

$(SUBDIRS):
    . conf.sh; $(MAKE) -C $@
0 голосов
/ 14 сентября 2011

EXPORT определяет переменную в текущей оболочке. Переменные не видны в вызывающей стороне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...