2016-05-24 3 views
3

GNU Makeではファイル名に%が含まれているファイルに依存することは可能ですか?私はもちろん、別のファイル名を選択することができますが%は常に避けるべきであるか、またはそれを逃れるための簡単な方法があるかどうか(私は\を試みた場合、知っていいだろうGNU Makeはファイル名に '%'をサポートしていますか?

foo: results(10%).dat 
    gnuplot config.plt 

:私はこのような何かを持っています、\\%%)。

編集:私の問題はもっと微妙なようです。理由マッチングとパーセントのファイル名の組み合わせで動作しないようです。

all: foo.txt bar.txt 

PERCENT := % 

foo%txt bar%txt: results(10$(PERCENT)).dat 
    touch foo$*txt bar$*txt 

これは失敗したが、ファイル名は%を持っていない場合、それは大丈夫です。

+0

私はちょうど同様の問題に遭遇しました...私はそれに '%'文字を持つディレクトリを持っており、Makeはこれらのディレクトリ内のファイルのリストを処理することになっています。それは最初のもので停止します。 %を取り出してうまく動作します。根本的な原因を見つけたことはありますか? –

+0

私は実際にこのような変数を使って同様に変数をエスケープしていましたが、問題は_again_に突き当たり、しばらく頭を傷つけていました。あなたの名前は依存関係にあるので、同じ問題ではないかもしれませんが、内容に括弧が入っていれば、 '$ <'やそれに類する変数を使用しようとしないでください。 – Caleb

答えて

2

あなたが試みることができる:

gnuplot前にスペースが実際にタブ文字です)
PERCENT := % 
foo: results(10$(PERCENT)).dat 
    gnuplot config.plt 

+0

非常に良いアイデア! GNU Make 4.1の魅力のように働く –

1

あなたが投稿した最初のルールのような通常のルールではパーセント文字は問題ありませんが、そのまま動作するはずです。

$(targets): %.txt: \%%.txt #dependencies will be %foo.txt and %bar.txt respectively 
ルール 静的パターンでエスケープすることができ

targets := foo.txt bar.txt 

.PHONY: all 
all: $(targets) 

$(targets): results(10%).dat 
    touch $(targets) 

%

第二の例として、あなたはパターンルールを望む理由はいかなる理由があるとは思えません

しかし、暗黙のパターンルールで%をエスケープする方法はないようです(2番目の例のように)。

関連する問題