如何在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
是空的。
感谢您的帮助。
答案 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命令时看不到。