我是GNU make的新手。我在NETAL软件中理解Makefile程序时遇到问题(可以从here下载)。
在.NETAL文件夹中,有一个Makefile文件,其中包含make.inc和make.headers等其他文件。 我理解文件夹NETAL中的Makefile中的大多数规则,除了这些:
第16和22行。$(LINK.o)$ ^ $(LDLIBS)$(OUTPUT_OPTION)
$(LINK.o)和$(OUTPUT_OPTION)是指什么?我无法在任何地方找到这些变量的定义/赋值(在make.inc和make.headers中都没有。)
第26和30行。$(COMPILE.c)$< $(OUTPUT_OPTION)
变量$(COMPILE.c)也存在同样的问题。我无法在任何地方找到它的任务,以及它所指的是什么。另外,我不明白$<的含义。 (以及为什么"<&#;;必须先跟一个美元符号" $")。我知道美元符号是变量的,就像在PHP中一样。
我自己读了手册(RTFM,我知道):GNU make manual
这是我阅读的结果:在第4.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)
不幸的是,没有解释什么是&#34; $(COMPILE.c)&#34;,&#34; $(OUTPUT_OPTION)&#34;和&#34; $&lt;&# 34;
有人能以一种我更容易理解的方式向我解释吗? 或者给我一个链接/关键字,以便我可以进一步使用Google。
答案 0 :(得分:2)
这些是prefedined make变量。来自GNU make manual:
生成目标文件的每个规则都使用变量OUTPUT_OPTION。 make定义此变量要么包含'-o $ @',要么为空,具体取决于编译时选项。
和
遵循编译.x源文件的规则使用变量COMPILE.x的约定。同样,从.x文件生成可执行文件的规则使用LINK.x;并且预处理.x文件的规则使用PREPROCESS.x。