2012-02-12 85 views
1

我正在尝试使用GNUplot和makefile生成一些图。我想要通过GNUplot运行目录中的每个* .plt文件,但是我看不到它能够正常工作。 这里是我的makefile至今:如果我单独指定.PLT文件生成文件问题(gnuplot)

all: %.tex 
%.tex: %.plt 
<tab> gnuplot < $< 

配方工作正常,但我希望它拿起我的新地块,因为我生产它们。

编辑: 我想我找到了现在的工作:

# plots all files in the folder with .plt extensions 
SOURCES = $(wildcard *.plt) 
TARGETS = $(SOURCES:.plt=.tex) 

all: $(TARGETS) 

%.tex: %.plt 
    gnuplot < $< 

有人可以证实我的推理(如下)是否正确? 以前我没有为all指定任何文件(我有点困惑%)。现在通过使用通配符拾取任何.plt文件来分配变量SOURCES(为什么在使用.plt而不是* .plt时不起作用?)。已分配SOURCE,然后设置TARGETS变量,现在all:具有指定要构建的文件。并且匹配规则现在运行。

+1

是的,你的推理链条是正确的。 – 2012-02-12 22:12:04

+1

使用.plt而不是* .plt不起作用,因为'wildcard'函数需要一个shell glob表达式。 From [here](http://www.gnu.org/software/make/manual/make.html#Wildcards):make中的通配符是'*','?'和'[...]',与Bourne shell相同。 – 2012-02-12 22:15:01

回答

5

all : %.tex将不起作用,因为目标名称中没有百分比,换句话说,它不是一个模式规则。

使用wildcard function让所有.plt文件的列表,并在这些文件上添加一个all依赖与延伸通过.tex取代:

PLT_FILES := $(wildcard *.plt) 
TARGETS := $(PLT_FILES:%.plt=%.tex) 

all: $(TARGET) 
%.tex: %.plt 
    gnuplot < $<