【问题标题】:What does "$<" mean when used in a g++ argument? [duplicate]在 g++ 参数中使用“$<”是什么意思? [复制]
【发布时间】:2016-10-08 10:47:54
【问题描述】:

我正在使用一个包含示例应用程序的库。示例 makefile 在参数中包含 $&lt;

all:test.cpp
    g++ -Wl,--no-as-needed -o Example $<
clean:
    rm -f SampleApp11

我已经查过了,tutorialspoint 这么说

$

另一个website 表示:

这是从 .c 构建 .o 的后缀替换规则 它使用自动变量 $<: gnu make .co>

我还是一头雾水,这是什么意思?

【问题讨论】:

  • 在您的示例中,它是 all: 目标之后的 first 依赖项(文件) - test.cpp
  • 啊,&lt;$ 告诉 g++ 编译哪个文件,对吗?
  • 请注意,这与 g++ 无关。它是在调用 g++ 之前替换它的 make 。 g++ 永远不会看到$&lt;。如果是这样,它会将其视为文件名,并可能会发出一条错误消息,提示找不到该名称的文件。
  • 将行更改为 echo test: $&lt; 会告诉您它的作用,然后您可以在文档中查找正确的工具(not GCC!)了解它的含义。试着习惯以这种方式进行研究和实验。
  • @LightnessRacesinOrbit 抱歉,我进行了大量研究,但仍然不清楚/困惑。这是我编写和编译 C/C++ 代码的第一周——我之前的经验是使用解释型语言。

标签: makefile gnu-make


【解决方案1】:

这实际上与编译器无关,它是Makefile 语法的一部分,它在编译器运行之前被替换。

在您的示例中,它是 all: 目标 - test.cpp 之后的 first 依赖项(文件)。

Makefile 的基本功能是在 dependency 发生变化时创建 target

target: dependency.cpp
    rule to create target (using dependency.cpp)

通常$&lt; 是编译器的输入$@输出

有点像这样(不是有效的Makefile):

$@: $<
    g++ -o $@ $<

我记得他们的方式是@ 类似于一个目标(在目标练习中),&lt; 类似于一个箭头。所以我想象一个箭头指向一个目标

@ <-------- (think "Robin Hood")

YMMV

【讨论】:

    【解决方案2】:

    它是GNU make's automatic variables 之一。

    第一个先决条件的名称。如果目标从 一个隐含的规则,这将是由 隐式规则(参见Implicit Rules)。

    先决条件是rule 中列出的文件:

    targets : prerequisites
            recipe
    

    例如,在以下规则中,第一个先决条件是test.c 文件:

    my_executable: test.c precompiled.o
        g++ -o my_executable $<
    

    相当于如下:

    my_executable: test.c precompiled.o
        g++ -o my_executable test.c
    

    precompiled.o 是第二个前提条件(隐含预编译的目标文件)。

    【讨论】:

      猜你喜欢
      • 2014-02-18
      • 2020-10-27
      • 2015-07-15
      • 2018-07-17
      • 2012-08-13
      • 1970-01-01
      • 1970-01-01
      • 2011-04-16
      • 1970-01-01
      相关资源
      最近更新 更多