c - 制作文件模式 %o :%. c

标签 c makefile

我在一个更大的项目中有两个文件 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/

相关文章:

xcode - 全新(干净)安装的 Lion 没有开发人员工具,Xcode 4.3 不再包含 make 和friends

c++ - 无法在 Windows 命令行中编译任何 Qt 项目,只能在 Qt Creator 中编译

c - perl如何从C头文件中提取#define'd数字

c - 释放结构中的数组后的 SIGABRT

c++ - 使用 ctypes 向 C/C++ 库提供函数的外部定义

c++ - 如何在 Visual Studio 2017 上构建 LIBSVM?

c - 这个makefile有什么作用?

c++ - 在 C++ 中以编程方式获取系统启动时间(Windows)

c - Trie 数据结构

makefile - nmake Makefile 将目标文件放在单独的目录中