什么是“$<”在g ++参数中使用时的意思是什么?

时间:2016-10-08 10:47:54

标签: makefile gnu-make

我正在使用具有示例应用程序的库。样本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 $ @

我仍然感到困惑,这意味着什么?

2 个答案:

答案 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是第二个先决条件(隐含的预编译目标文件)。