2016-05-28 12 views
0

私は現在makefile上で作業していますので、別の問題が発生しました。私は.midファイルを.sファイルに変換するビルドプロセスの一部としてこのルールを使用しています。Makefileはコンパイルフラグとしてファイルパスの一部を抽出します

$(MIDAS): $(BLDPATH)/%.s: %.mid 
$(shell mkdir -p $(dir [email protected])) 
#test $($< | sed "*") 
$(MID2AGB) $(MIDFLAGS) -G$($< | sed ".*mus/vcg([0-9]{3})/.*\.mid") $< [email protected] 

すべての.mid入力ファイルは同じ形式に従います。 mus/vcg [0-9] {3} /。 .midです。つまり、命名規則vcgXXXに従って異なるディレクトリに格納されます。ここで、Xは0〜9の任意の数字です。 (たぶん私の正規表現はこれでも間違っています)。 私は$(MID2AGB)を呼び出すときにコンパイラフラグ-GXXXを使用したいと思います。しかし、このフラグのXXXは、入力ファイルのパスからのXXXと一致する必要があります。

私のメイクファイルコードは機能しません。任意のアイデアどのようにこの問題を解決するには?

答えて

1

粗製のが、この使用してメイクの文字列操作ツールを実行するための効果的な方法があります:

# suppose the source is .mus/vcg456/Z.mid 

$(MIDAS): $(BLDPATH)/%.s: %.mid 
    @echo $*          # this gives .mus/vcg456/Z 
    @echo $(subst /, ,$*)      # this gives .mus vcg456 Z 
    @echo $(word 2,$(subst /, ,$*)    # this gives vcg456 
    @echo $(subst vcg,,$(word 2,$(subst /, ,$*)) # this gives 456 
関連する問題