我在一个更大的项目中有两个文件a.c和b.c.我决定移动源并只添加对象文件a.o和b.o
如果make文件有一个规则%.o:%。c并在make文件中添加a.o和b.o
我期待投诉a.c和b.c未找到。
但它编译没有任何错误
答案 0 :(得分:0)
如果make想要构建像xyz.o
这样的文件,并且该目标没有明确的规则,它将查看隐式(模式和后缀)规则以尝试查找规则。如果有与 AND 匹配的规则,make知道如何构建所有先决条件,那么规则将匹配,make将尝试使用它。
如果make无法构建一个或多个先决条件,则该隐式规则不匹配,make将继续寻找不同的隐式规则。这不是错误!在目标文件的特定情况下,make具有内置规则,这些规则知道如何从C源文件,C ++源文件,FORTRAN源文件,汇编文件等构建.o
。它们都具有目标模式%.o
但其中只有一个(通常)会匹配...其他人被抛弃但不是错误。
如果在隐式规则搜索结束时没有规则与目标匹配,但目标存在,则没有问题:make假定此文件是源文件(如xyz.c
或者xyz.h
)不应该被构建,只是使用它。
如果在搜索完所有规则但没有找到匹配项后,目标文件(xyz.o
)确实存在 ,那么您有错误并且make会报告它没有#&# 39;知道如何建立目标。