我在一个更大的项目中有两个文件 a.c 和 b.c。我决定移动源代码并仅添加目标文件 a.o 和 b.o
如果make文件有规则%.o:%.c并在make文件中添加a.o和b.o
我期待投诉 a.c 和 b.c 未找到。
但是编译没有任何错误
最佳答案
如果 make 想要构建像 xyz.o
这样的文件,并且该目标没有明确的规则,它将查看隐式(模式和后缀)规则以尝试找到规则。如果存在与目标匹配的规则并且 make 知道如何构建所有先决条件,则该规则将匹配并且 make 将尝试使用它。
如果 make 无法构建一个或多个先决条件,则该隐式规则不匹配,并且 make 将继续寻找不同的隐式规则。这不是一个错误!在目标文件的特定情况下,make 有内置规则,知道如何从 C 源文件、C++ 源文件、FORTRAN 源文件、汇编文件等构建 .o
。目标模式 %.o
但只有其中一个(通常)会匹配...其他的会被抛出,但这不是错误。
如果在隐式规则搜索结束时没有规则与目标匹配,但目标存在,那么就没有问题:make 假定该文件是源文件(如 xyz.c
) > 或 xyz.h
) 不应该被构建,只需使用它。
如果搜索完所有规则后没有找到匹配项,并且目标文件 (xyz.o
) 不存在,则出现错误,make 将出现错误报告它不知道如何构建该目标。
关于c - 制作文件模式 %o :%. c,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29300132/