Makefile“重新链接”是啥意思? [关闭]

Posted

技术标签:

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

谁能简单解释一下:

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

【问题讨论】:

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

【讨论】:

以上是关于Makefile“重新链接”是啥意思? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Linux makefile中的obj-y,请问是啥意思

@: (在符号冒号处)在 Makefile 中是啥意思?

makefile 变量前后加 @是啥意思?例如 prefix=@prefix@

$@ 在Linux Makefile中是啥意思

在 Watcom makefile 中扩展宏时 *$ 是啥意思?

Vim 中的 ^M 字符是啥意思?