0

我有一个包含这样内容的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 .. 并一个接一个地构建?

4

1 回答 1

1

当我给 make 它如何找到顺序 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(descriptor file) ,它就能够形成一个依赖树....就像什么依赖/需要什么。所以在内部它使 a 有这样的东西......

  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 不是一个目标,而是一个变量,我想在你的 makefile 的下面某处被替换为一个规则..... chk 出现 $(MODULE)

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

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

如果你还是有点困惑......访问链接http://www.jfranken.de/homepages/johannes/vortraege/make_inhalt.en.html

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

希望这可以帮助 !

于 2013-06-08T23:06:02.210 回答