2012-02-12 132 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 < $<