c++ - Makefile 中的 "relink"意味着什么?

标签 c++ c makefile compilation gnu-make

有人可以简单地解释一下吗:

  1. Makefile 的重新链接意味着什么?
  2. 为什么会发生这种情况?
  3. 如何避免?

最佳答案

make 的一个主要功能是在 makefile 中指定依赖项(通常命名为 makefile,但也可能有其他名称,例如 >MyRules.mk),格式如下:

FileX: FileA FileB FileC
    Command to make FileX from FileA FileB FileC

鉴于此依赖性,如果 FileAFileBFileC 中任何一个的修改时间晚于 的修改时间FileX,然后make将执行命令来制作新版本的FileX

常见的依赖规则表示目标文件依赖于 C 源文件和一些头文件,例如:

foo.o: foo.c foo.h project.h
    $(CC) -c foo.c

在大型项目的 makefile 中,规则和文件列表通常更加复杂,使用多个符号来传达命令、选项和文件列表。

另一个常见规则是从目标文件中创建可执行文件:

MyProgram: foo.o bar.o baz.o
    $(LD) -o $@ $^

在此上下文中,“重新链接”仅意味着 make 将执行命令以再次将对象链接到可执行文件。发生这种情况的原因可能是因为其中一个必备文件(目标文件,通常名称以 .o 结尾)比目标可执行文件新,或者因为 makefile 中的规则尚未正确写入表达依赖关系。

避免这种情况需要理解 make 及其规则和 makefile 的工作原理。

关于c++ - Makefile 中的 "relink"意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52502399/

相关文章:

C++ Derived class is abstract 错误

c++ - 在 C++ 中返回 vector 元素的复制值

c++ - 为什么我在输出的末尾会得到额外的字符?

c++ - 将 Rcpp 对象分配到 Rcpp 列表中会产生最后一个元素的拷贝

c++ - 为什么使用 abs() 或 fabs() 而不是条件否定?

c++ - Perl 系统调用导致核心转储但 $?保持为零

c - 什么时候在预处理中删除换行符?

macos - 制作 CUDA 5.0 示例时遇到 Open MPI 相关问题 (Mac OS X ML)

c++ - g++ -MG 标志的意外行为

python - 为什么 SCons VariantDir() 不将输出放在给定目录中?