GNU Makefile中变量的赋值

GNU Makefile中变量的赋值,makefile,gnu-make,Makefile,Gnu Make,我是GNU制造的新手。我在理解NETAL软件中的Makefile程序(可从下载)时遇到问题 在NETAL文件夹中,有一个文件Makefile,其中包括make.inc和make.headers等其他文件。 我了解NETAL文件夹内Makefile中的大多数规则,但以下规则除外: 第16行和第22行$(LINK.o)$^$(LDLIBS)$(输出选项) $(LINK.o)和$(OUTPUT_选项)指的是什么?我在任何地方都找不到这些变量的定义/赋值(make.inc和make.headers中都找

我是GNU制造的新手。我在理解NETAL软件中的Makefile程序(可从下载)时遇到问题

在NETAL文件夹中,有一个文件Makefile,其中包括make.inc和make.headers等其他文件。 我了解NETAL文件夹内Makefile中的大多数规则,但以下规则除外:

第16行和第22行$(LINK.o)$^$(LDLIBS)$(输出选项)

$(LINK.o)和$(OUTPUT_选项)指的是什么?我在任何地方都找不到这些变量的定义/赋值(make.inc和make.headers中都找不到)

第26行和第30行$(COMPILE.c)$<$(输出选项)


变量$(COMPILE.c)也存在同样的问题。我在任何地方都找不到它的任务,也找不到它所指的内容。另外,我不理解$<(以及为什么“这些是前置的make变量)。从:

生成对象文件的每个规则都使用变量OUTPUT_选项。make将此变量定义为包含'-o$@',或为空,具体取决于编译时选项

make遵循编译.x源文件的规则使用变量compile.x的约定。类似地,从.x文件生成可执行文件的规则使用LINK.x;预处理.x文件的规则使用preprocess.x


运行
make-pn | less
,您可以准确地看到这些变量定义为什么。为了明确起见,GNU make有一个大型的内置宏目录和预定义的隐式规则。这些是其中的一些。要全部查看,您可以要求make使用
-p
选项打印其规则数据库。如果您只想查看bui在宏/规则中,而不是在您自己的宏/规则中,您可以使用
make-p-f/dev/null
(假设您在Linux或MacOS这样的UNIX系统上)。user657267&MadScientist:谢谢!好的。非常感谢。因此,它取自本章(GNU make手册):隐式规则使用的10.3变量,我还没有读过。
    OBJDIR := objdir
    OBJS := $(addprefix $(OBJDIR)/,foo.o bar.o baz.o)
    $(OBJDIR)/%.o : %.c
       $(COMPILE.c) $(OUTPUT_OPTION) $<
    all: $(OBJS)
       $(OBJS): | $(OBJDIR)
    $(OBJDIR):
       mkdir $(OBJDIR)