我有一个包含这样内容的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 ..并逐个构建?
答案 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分钟内解释大部分概念......
希望这有帮助!