有人可以用简单的语言解释:
make
的一个主要特征是依赖关系在makefile
(通常命名为makefile
,但可能有其他名称,如MyRules.mk
)中指定,形式如下:
FileX: FileA FileB FileC Command to make FileX from FileA FileB FileC
鉴于这种依赖性,如果任何FileA
,FileB
或FileC
的修改时间晚于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如何工作的问题。