我有一个Makefile,它会解压一系列的tarball。目前规则是这样写的:
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.
我认为它应该能够正常工作,但老实说,我甚至不确定如何查看它会扩展成什么。这里有什么明显的问题吗?
eval
,这也是我的问题之一。 - FatalErrormake
,我已经添加了一种替代方案,只需利用静态模式规则
而不是eval
。 :) - Tuxdude