我正在研究从编译器课程项目中获得的Makefile。只有一部分粘贴在这里。
from xlwings import Workbook, Range
def print_text():
wb = Workbook.caller()
Range('A1').value = 'å'
如你所见,目标'插件'没有依赖关系,如果我理解正确的话,应该意味着它的配方永远不会运行(除非它被声明为伪目标,这不是这里的情况)
但是,当我输入'make printCode'时,(printCode是列表中的最后一个目标)插件目标会执行。这怎么可能?是否存在一些隐含规则,指出Makefile的第一个目标被视为虚假目标,例如“all”?
答案 0 :(得分:1)
你有点落后了。
可以运行plugin
规则之类的规则。你可以通过执行'make plugin'来运行它,或者'make'如果它是默认目标(在这种情况下它是第一个),,或者它是另一个必须是目标的先决条件建。
我不确定当你'make printCode'时会发生什么,因为你只向我们展示了makefile的一部分,并且没有适合的规则,但是根据这个规则判断:
%.printCode: %.bc plugin
opt -load Debug/lib/P1.so -printCode $*.bc
我猜测printCode
规则取决于plugin
或foo.printCode
取决于plugin
的内容。因此,Make看到plugin
是先决条件,看到没有这样的文件,因此确定必须构建plugin
。然后,它会查找构建plugin
的规则,找到并运行它。