在Makefile中使用shell参数扩展

时间:2012-02-17 10:45:15

标签: bash shell makefile

如何在Makefile中使用shell参数扩展? 我需要获取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 个答案:

答案 0 :(得分:3)

shell无法将内容导出到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在完成时看到函数的输出,但在执行shell命令时看不到。