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
)中指定,格式如下:
鉴于此依赖关系,如果FileA
、FileB
或FileC
的修改时间晚于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“重新链接”是啥意思? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
makefile 变量前后加 @是啥意思?例如 prefix=@prefix@