名为 makefile 的文件以结构化方式告知 make,哪些源文件和目标文件依赖其他文件。它还定义了编译和链接文件所需的命令。
例如,假设您的程序有四个源文件以及相应的 makefile 文件:
demo% ls makefile commonblock computepts.f pattern.f startupcore.f demo% |
假设 pattern.f 和 computepts.f 都有一个名为 commonblock 的 INCLUDE,并且您希望编译每个 .f 文件并将这三个可重定位的文件与一系列库一起链接成一个名为 pattern 的程序。
这时,makefile 将会如下所示:
demo% cat makefile pattern: pattern.o computepts.o startupcore.o f95 pattern.o computepts.o startupcore.o -lcore95 \ -lcore -lsunwindow -lpixrect -o pattern pattern.o: pattern.f commonblock f95 -c -u pattern.f computepts.o: computepts.f commonblock f95 -c -u computepts.f startupcore.o: startupcore.f f95 -c -u startupcore.f demo% |
makefile 的第一行表明 pattern 的创建取决于 pattern.o、computepts.o 和 startupcore.o。下一行及其后续各行给出了由可重定位的 .o 文件和库创建 pattern 的命令。
makefile 中的每一条目都是一项规则,它描述了目标对象的依赖性以及创建该对象所需的命令。规则的结构为:
target: dependencies-listTAB build-commands
依赖性-每一条目的头一行均是为目标文件命名,其后是目标依赖的所有文件。
命令-每一条目随后还有一行或多行,这些行指定将生成本条目相应的目标文件的 Bourne shell 命令。这些命令行中的每一行都必须用一个制表符缩进。