2012-01-25 25 views
8

ファイルの偽の依存関係を実行する方法はありますか? このファイルが存在しない場合、ファイルが存在しない場合にのみMakefileがファイルの偽ターゲットを実行する

ファイルにフォニー依存性がない場合は、このルールのコンテンツ のみが動作します。しかし、依存関係として偽のターゲットを追加すると、依存ルールと既存のファイルを生成するルールが実行され続けます。

私はあなたが私の問題を見ることができるように、私のMakefileを単純化:


.PHONY: phonytarget all clean 

all: $(CURDIR)/a.a 
    @echo done 

$(CURDIR)/a.a: phonytarget 
    @touch [email protected] 

phonytarget: 
    @echo what the heck is wrong with you 

答えて

7

使用order-only prerequisites

時折、しかし、あなたがルールに特定の順序を課すしたい状況がありますこれらのルールの1つが実行されると、ターゲットを強制的に更新することなく呼び出されます。この場合、発注のみの前提条件を定義する必要があります。指図のみの前提条件は、前提条件リストにパイプシンボル(|)を配置することで指定できます。パイプシンボルの左側の前提条件はすべて正常です。右側の前提条件はオーダーのみです:

targets : normal-prerequisites | order-only-prerequisites 

通常の前提条件のセクションは、もちろん空である場合があります。また、同じターゲットに対して複数の前提条件が宣言されている場合もあります。これらは適切に追加されます(通常の前提条件は通常の前提条件のリストに追加され、受注のみの前提条件は受注専用前提条件のリストに追加されます)。

.PHONY: phonytarget all clean 

all: $(CURDIR)/a.a 
    @echo done 

$(CURDIR)/a.a: | phonytarget 
    @touch [email protected] 

phonytarget: 
    @echo what the hack is wrong with you 
関連する問題