我正在使用具有示例应用程序的库。样本makefile在参数中包含$<
:
all:test.cpp
g++ -Wl,--no-as-needed -o Example $<
clean:
rm -f SampleApp11
我看了这个,tutorialspoint说了
$&LT;导致操作的相关文件的名称。
另一个website表示:
这是从.c's构建.o的后缀替换规则 它使用自动变量$&lt;:前提条件的名称 规则(.c文件)和$ @:规则目标的名称(.o文件) (参见关于自动变量的gnu make manual部分) .c.o: $(CC)$(CFLAGS)$(INCLUDES)-c $&lt; -o $ @
我仍然感到困惑,这意味着什么?
答案 0 :(得分:16)
这实际上与编译器无关,它是consp
语法的一部分,在编译运行之前它被替换。
在您的示例中,它是Makefile
目标之后的第一个依赖关系(文件) - all:
。
test.cpp
的基本功能是在依赖更改时创建目标:
Makefile
通常target: dependency.cpp
rule to create target (using dependency.cpp)
是编译器的输入,而$<
是输出。
它好像就是这样(不是有效的$@
):
Makefile
我记住它们的方式是$@: $<
g++ -o $@ $<
类似于目标(如在目标练习中),@
类似于箭头。所以我想象一个箭头指向目标:
<
<强> YMMV 强>
答案 1 :(得分:9)
这是GNU make's automatic variables之一。
第一个先决条件的名称。如果目标得到它的配方 一个隐含的规则,这将是第一个添加的先决条件 隐式规则(见Implicit Rules)。
先决条件是rule中列出的文件:
targets : prerequisites
recipe
例如,在以下规则中,第一个先决条件是test.c
file:
my_executable: test.c precompiled.o
g++ -o my_executable $<
相当于以下内容:
my_executable: test.c precompiled.o
g++ -o my_executable test.c
precompiled.o
是第二个先决条件(隐含的预编译目标文件)。