3
我有一个提取一系列tarball的Makefile。现在的规则是这样写的:GNU make:生成提取tarball的规则
dirname:
tar zxvf file.tar.gz
,并依赖于扩大压缩包参考dirname
其他目标。但是,为每个压缩包定义一个这样的规则是一种混乱。所以,我试图使用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))))
但它似乎没有工作。我与这个压缩包检测(在同一目录):
$ 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.
好像它应该工作给我,但老实说,我甚至不知道我怎么可以看到它扩展到。这里有什么明显的错误?
谢谢,这工作。此外,似乎3.79没有'eval'这是我的问题的一部分。 – FatalError 2013-03-11 22:13:11
@FatalError - 如果您需要使用旧版本的'make',那么只是使用'static pattern rules'并且不使用'eval'就添加了一个替代解决方案。 :) – Tuxdude 2013-03-11 22:20:31