2012-02-12 15 views
1

私はメイクファイルでGNUplotを使っていくつかのグラフを作成しようとしています。ディレクトリ内のすべての* .pltファイルがGNUplotを介して実行されるようにしたいと思いますが、動作させるにはわかりません。ここで は、これまでの私のメイクです:私は、個々の.pltファイルを指定した場合makefileの問題(gnuplot)

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

レシピが正常に動作しているが、私はそれらを生産するとして、それは私の新しいプロットをピックアップします。

EDIT

: 私は、私はそれを今働いてしまったと思う:

# 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

はい、推論のあなたのチェーンが右です。 –

+1

* .pltの代わりに.pltを使用すると、 'wildcard'関数がシェルのglob式をとるため動作しません。 [here](http://www.gnu.org/software/make/manual/make.html#Wildcards):makeのワイルドカード文字は '*'、 '?'、 '[...]'です。 Bourneシェルと同じです。 –

答えて

5

all : %.texは、ターゲット名にパーセントがないため、つまりパターンルールではありません。すべての.pltファイルのリストを取得し、.texに置き換え拡張子を持つこれらのファイルのall依存を追加する

使用wildcard function

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

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