использовать расширение параметра оболочки в Makefile - PullRequest
2 голосов
/ 17 февраля 2012

Как я могу использовать расширение параметра оболочки в Makefile?Мне нужно получить путь к базе данных leveldb.

То, что я пробовал до сих пор, находится в моем Makefile:

$(shell db=$(locate leveldb/db.h); export LEVELDB_PATH=${db%%/include/leveldb/db.h})
LEVELDB_LIBS=-L$(LEVELDB_PATH) -I$(LEVELDB_PATH)/include -lleveldb

Но LEVELDB_PATH пусто.

Спасибо за помощь.

1 Ответ

3 голосов
/ 17 февраля 2012

Оболочка не может экспортировать вещи в ваш Makefile.Вместо этого попробуйте что-то вроде этого.

db := $(shell locate leveldb/db.h)
LEVELDB_PATH:=$(patsubst %/include/leveldb/db.h,%,$(db))

... или, чтобы сэкономить временную переменную,

LEVELDB_PATH:=$(shell locate leveldb/db.h | sed 's%/include/leveldb/db.h$$%%')

Редактировать : исправлено использование $(patsubst) вместо$(subst) и двойной знак доллара в сценарии sed.

В общем, все, что происходит внутри $(shell ...), происходит в подпроцессе, который (как всегда) не может изменить своего родителя.make видит выходные данные функции после ее завершения, но не то, что произошло во время выполнения команд оболочки.

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