我有一个提取一系列 tarball 的 Makefile。现在规则是这样写的:
dirname:
tar zxvf file.tar.gz
和其他依赖于扩展的 tarball 参考的目标dirname
。但是,为每个 tarball 定义这样的规则有点混乱。所以,我正在尝试使用该eval
功能来自动生成这些规则。我的尝试如下所示:
TARFILES = $(wildcard *.tar.gz *.tgz)
define extract_tmpl =
$(shell tar tf $(1) | head -1):
tar zxvf $(1)
endef
$(foreach file, $(TARFILES), $(eval $(call extract_tmpl, $(file))))
但这似乎不起作用。我正在使用这个 tarball 进行测试(在同一个目录中):
$ ls Python-2.6.6.tgz
Python-2.6.6.tgz
$ tar tf Python-2.6.6.tgz | head -1
Python-2.6.6/
$ make Python-2.6.6/
make-3.79.1-p7: *** No rule to make target `Python-2.6.6/'. Stop.
似乎它应该对我有用,但老实说,我什至不确定我如何才能看到它扩展到什么。这里有什么明显的错误吗?