2009-07-22 6 views
1

マイ圧縮オーディオCAFSは、第二の規則によって途中で処理されている(しかし、私は唯一のファイルをしたいですこのルールで扱う資産/音声(深くはない)。アイデア?私は本当に(私はそれに他の問題があるかもしれないと思うと)単にルールの順序を変更したくない:Makefileのパターンの問題

$(ASSETS_TARGET_PATH)/$(AUDIO_DIR): 
    mkdir -p $(ASSETS_TARGET_PATH)/$(AUDIO_DIR) 

$(ASSETS_TARGET_PATH)/$(AUDIO_DIR)/%.caf: $(BUILD_DIR)/$(ASSETS_DIR)/$(AUDIO_DIR)/%.caf 
    cp '$<' $(ASSETS_TARGET_PATH)/$(AUDIO_DIR) 

$(ASSETS_TARGET_PATH)/$(AUDIO_DIR)/$(AUDIO_COMPRESSED_DIR): 
    mkdir -p $(ASSETS_TARGET_PATH)/$(AUDIO_DIR)/$(AUDIO_COMPRESSED_DIR) 

$(ASSETS_TARGET_PATH)/$(AUDIO_DIR)/$(AUDIO_COMPRESSED_DIR)/%.caf: $(BUILD_DIR)/$(ASSETS_DIR)/$(AUDIO_DIR)/$(AUDIO_COMPRESSED_DIR)/%.caf 
    cp '$<' $(ASSETS_TARGET_PATH)/$(AUDIO_DIR)/$(AUDIO_COMPRESSED_DIR) 

答えて

0

私は、これはMakefileを無理さ感を持っています。
ファイルを処理する簡単なスクリプトを作成してみませんか?

find . -type f -name *.caf -exec ProcessScript <args> {} \; 

ProcessScript最後の引数、{}は、上記の行に書かれている
として渡された各ファイルを変換する必要があります。
スクリプトに渡す他の引数には、<args>があります。

+0

原因はゲットーです! :-)これは大きなMakefileの一部でした... –

2

問題の一部は、パターンルールを乱用していることです。 * .cを* .cから作成する方法を教えているような、もっとグローバルな状況を想定しています。ディレクトリのような日常的なことは、それらに関係するべきではありません。

私はあなたのルートディレクトリにグロビング使用してターゲットの包括的なリストを作成することをお勧め。次に、文字列の置換を使用して上位のルールのターゲットを取得できます。

CAF_ASSETS := $(notdir $(wildcard $(BUILD_DIR)/$(ASSETS_DIR)/$(AUDIO_DIR)/*.caf)) 

あなたがこれをしたら、あなたはターゲットの並列リストにメイク機能でそれを変換することができますか、あなたはそうのような静的なパターンルールを使用することができます。

CAF_TARGETS := $(addprefix $(ASSETS_TARGET_PATH)/$(AUDIO_DIR)/, $(CAF_ASSETS)) 

$(CAF_TARGETS) : $(ASSETS_TARGET_PATH)/$(AUDIO_DIR)/%.caf : $(BUILD_DIR)/$(ASSETS_DIR)/$(AUDIO_DIR)/%.caf 
    cp '$<' '[email protected]' 

静的の利点パターンルールは、パターンルールをリストされたファイルだけに限定するというものです。