【问题标题】:What does it mean for a Makefile to "relink"? [closed]Makefile“重新链接”是什么意思? [关闭]
【发布时间】:2018-09-25 16:02:38
【问题描述】:

谁能简单解释一下:

  1. Makefile 重新链接意味着什么?
  2. 为什么会这样?
  3. 如何避免?

【问题讨论】:

  • 我以前从未听说过这个词。你能告诉我们你在哪里看到的吗?
  • 我的作业说...如果我的 makefile "relinks" 我会丢分.. 也不知道。
  • 我只想请你的教授澄清他们的意思。如果您遇到某种链接错误,请在问题中发布您的 makefile。
  • 我猜“重新链接”意味着二进制文件在多次运行make 时总是重新链接。这个问题的一个例子是这个问题stackoverflow.com/q/42718392/72178
  • 其他人也有同样的问题,如herehere,但答案是具体的.. 我希望有人能从一般意义上解释它。

标签: c++ c makefile compilation gnu-make


【解决方案1】:

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

文件X:文件A 文件B 文件C 从 FileA FileB FileC 生成 FileX 的命令

鉴于此依赖关系,如果FileAFileBFileC的修改时间晚于FileX的修改时间,则make将执行命令以生成新版本FileX.

一个常见的依赖规则是说一个目标文件依赖一个C源文件和一些头文件,比如:

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

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

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

我的程序:foo.o bar.o baz.o $(LD) -o $@ $^

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

避免它是一个了解make及其规则和makefile如何工作的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-29
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多