Makefile“重新链接”是什么意思?

时间:2018-09-25 16:02:39

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

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

  1. Makefile 重新链接是什么意思?
  2. 为什么会发生?
  3. 如何避免呢?

1 个答案:

答案 0 :(得分:1)

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的工作方式。