2012-02-17 5 views
2

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

То, что я пытался до сих пор в моем 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 пуста.

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

ответ

3

Оболочка не может экспортировать материал в файл 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$$%%') 

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

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

+0

первый из них, например, '-I/home/volker/TID/databases/leveldb/include/leveldb/db.h/include', а второй дает:' sed: -e выражение # 1, char 24: unterminated 's 'command' – ezdazuzena

+0

Похож '%' создает проблемы. Оставив это (и учитывая, что это может быть строка в середине пути ?!), она работает. – ezdazuzena

+0

Жаль об этом; обновлено. – tripleee

Смежные вопросы