make如何找到模块的顺序?

时间:2013-05-22 12:47:01

标签: makefile

我有一个包含这样内容的makefile

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 ..并逐个构建?

1 个答案:

答案 0 :(得分:1)

当我给出如何找到订单ADW,AEG ..并一个接一个地建立?

嗯,好吧,但不是那样......我完全赞同@madscientist和@twalberg的观察。

看看示例makefile:

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(描述符文件),它就能够形成一个依赖树....就像什么依赖/需要什么。所以在内部它会产生类似的东西......

  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 包括$(CORE)/BUILD/package.mk

这里模块不是一个目标,而是一个变量,我认为你的makefile中的某个地方被替换成一个规则..... chk出现$(MODULE)

但是没有准确的方法可以说在AEG之前构建ADW ....就像在makefile中一样,如果规则可能将AEG声明为目标ADW的依赖,那么构建ADW make必须首先构建AEG从而增加了它的构建链ADW&lt; - AEG。

因此扭转了你的假设....这有助于你理解链接过程吗?

如果您仍然有点困惑......请访问链接http://www.jfranken.de/homepages/johannes/vortraege/make_inhalt.en.html

这应该在大约5-7分钟内解释大部分概念......

希望这有帮助!