0

このような内容のメイクファイルがあります

MODULES =  ADW AEG DLG FDUfinance ODD PRI SPPA ADFGcommon PYMT LUR LBD \
           FAA PPTP COLLINT COR ADFG COA COLLINTtestRecord COLLINTtestScenario \
           LFPL LFP
include $(CORE)/BUILD/package.mk

私が与えるmakeと、ADW、AEG ..の順序をどのように見つけて、次々とビルドしますか?

4

1 に答える 1

1

make を指定すると、ADW、AEG の順序をどのように見つけて、次々とビルドしますか?

うーん、ええ、しかし正確にはそうではありません..... @madscientistと@twalbergの観察に完全に同意します。

メイクファイルの例を見てください:

Kaizen ~/make_prac $ cat mk.name
 ## make to accept name and display hello name
 arg1="" ;

 .PHONY : name \
  hello

   hello : name
         echo "hello $(arg1)" ;

    name :
          echo "name given is : $(arg1)" ;

ここで、make が makefile(descriptor file) を読み取ると、依存関係ツリーを形成することができます。内部的には、このようなものを持っています...

  hello <-- name <-- no dep 
  name <-- no dep

これは、makefile の内容に基づいています -- ルール/ターゲット (hello と name はここではルールです) とそれらの依存関係リスト ( : の後のファイル/ターゲット)

なのでラインから

   hello : name
           echo "hello $(arg1)" ;

ターゲットの hello をビルドするには、ターゲット名が利用可能/最初にビルドされる必要があることを暗示している可能性があります。同様に、言及されたすべてのターゲットとその依存関係リストを通過し、プロセスで「全体的なビルド」チェーン(依存関係ツリーと呼ぶこともできます)を作成します....上記のように。

実行のために、常にビルド チェーンを参照し、ターゲット自体をビルドする前にターゲットの依存関係をビルドします (古い場合)。

例の出力:

   Kaizen ~/make_prac $ make -f mk.name arg1="kaizen" ;
     echo "name given is : kaizen" ;
     name given is : kaizen
     echo "hello kaizen" ;
     hello kaizen

質問に戻ります:

MODULES = ADW AEG DLG FDUfinance ODD PRI SPPA ADFGcommon PYMT LUR LBD \ FAA PPTP COLLINT COR ADFG COA COLLINTtestRecord COLLINTtestScenario \ LFPL LFP include $(CORE)/BUILD/package.mk

ここでモジュールはターゲットではありませんが、メイクファイルの下のどこかにあると思われる変数がルールに置き換えられます..... $(MODULE) の出現を確認します

しかし、ADW が AEG の前にビルドされると言う正確な方法はありません .... makefile のように、ルールが AEG をターゲット ADW の依存として指定する可能性がある場合、ADW をビルドするには、最初に AEG をビルドする必要があるため、に追加しますそのビルド チェーン ADW <-- AEG。

したがって、仮定を逆転させます....これは連鎖プロセスを理解するのに役立ちますか?

まだ少し混乱している場合は……リンクにアクセスしてくださいhttp://www.jfranken.de/homepages/johannes/vortraege/make_inhalt.en.html

これにより、約 5 ~ 7 分でほとんどの概念が説明されるはずです...

お役に立てれば !

于 2013-06-08T23:06:02.210 に答える