2016-08-04 11 views
0

問題:実行時に依存関係リストが構築されているため、ターゲットがビルドされません。変数ファイルを宣言しているときに依存関係リストを指定する方法。メイクファイルのルールで変数を設定する方法

レシピ(ルール)から変数VIP_FOFs VIP_XMLを再定義する方法はありますか?

コード: (* .fofファイルは、コピー先のcopy_fofからスクリプトtemp.plによって生成されます)したがって、copy_fofのレシピからVIP_FOFsとVIP_XMLsを宣言する方法はありますか?

VIP_FOFs := $(wildcard $(RECITAL_PATH)/vip_xml/xml_generation/*.fof) 

VIP_XMLs = $(VIP_FOFs:.fof=.xml) 

all: copy_fof $(RECITAL_PATH)/catalog/catalog.xml 

copy_fof: 
     `perl temp.pl` 

%.xml: %.fof 
    rpfImport \ 
     --view rtl_simulation \ 
     --append_log \ 
     --log $(RECITAL_PATH)/logs/rpfImport.log \ 
     --format fof --vlnv ,,$(notdir $(basename $< .fof)), \ 
     --output [email protected] $< ; 

$(RECITAL_PATH)/catalog/catalog.xml: $(VIP_XMLs) 
    @echo "# generating catalog.xml "; \ 
    rpfCatalog --add $(VIP_XMLs) 
+0

フォーマットを修正してください。何かを理解するのは難しいです。 – user657267

+0

@ Kusalanadaに感謝します。今はっきりしていることを願って。 –

+1

いいえ、それはまったく明らかではありません。あなたはあなたが何を求めているのか、あなたが現在持っている結果、満足していない理由、最後には何も示していないことを明確に説明していません。お手伝いをしてください。 –

答えて

0

makeは、ターゲット/前提条件の依存関係の記述に基づいて、する必要がある唯一のものを再構築することを意図しています。 makeを呼び出すたびに*.fofターゲットがtemp.plスクリプトによって再構築された場合、makeはむしろ役に立たないです。毎回すべてを再構築するには、単純にperlスクリプトを修正して仕事を終え、makeを使わないでください。

以下では、temp.plスクリプトが変更されない限り、*.fofを再構築する必要はありません。また、あなたの主な問題であると思われるファイル*.fofの名前を予測できないと仮定します。あなたがメイクを起動するとき、それはall偽のターゲットをビルドします

VIP_FOFs := $(wildcard $(RECITAL_PATH)/vip_xml/xml_generation/*.fof) 
VIP_XMLs := $(patsubst %.fof,%.xml,$(VIP_FOFs)) 

.PHONY: all 

all: copy_fof 
    $(MAKE) $(RECITAL_PATH)/catalog/catalog.xml 

copy_fof: temp.pl 
    perl temp.pl 
    touch [email protected] 

$(VIP_XMLs): %.xml: %.fof 
    rpfImport \ 
     --view rtl_simulation \ 
     --append_log \ 
     --log $(RECITAL_PATH)/logs/rpfImport.log \ 
     --format fof --vlnv ,,$(notdir $(basename $< .fof)), \ 
     --output [email protected] $< ; 

$(RECITAL_PATH)/catalog/catalog.xml: $(VIP_XMLs) 
    @echo "# generating catalog.xml "; \ 
    rpfCatalog --add $(VIP_XMLs) 

:あなたが再帰的なメイクを(作る呼び出し作る)を使用することができ、この問題を解決するために

allは偽物なので、そのレシピは常に実行されます。 copy_fof空のファイルがtemp.plスクリプトより新しい場合は、前提条件allには何もしません。*.fofのファイルは最新です。それ以外の場合はtemp.plスクリプトが実行され、*.fofファイルが作成され、空のファイルが作成または変更されてジョブが完了したことが示されます。

次に、allレシピが実行され、makeが呼び出されて$(RECITAL_PATH)/catalog/catalog.xmlが作成されます。今回は、*.fofファイルが存在し、VIP_FOFsVIP_XMLsという変数には、期待する値が使用されます。

+0

@ Renaud Pacalet ...再帰的なmakeの使用は私の問題を解決します。 –

関連する問題