【问题标题】:What do $< and $@ represent in a Makefile?$< 和 $@ 在 Makefile 中代表什么?
【发布时间】:2009-05-29 06:23:10
【问题描述】:

谁能解释Makefile$&lt;$@的含义?

【问题讨论】:

    标签: makefile


    【解决方案1】:

    $&lt; 计算为 make 规则中的第一个“先决条件”,$@ 计算为 make 规则中的“目标”。

    这是一个例子:

    file.o : file.c
            $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
    

    在这种情况下,$&lt; 将替换为 file.c$@ 将替换为 file.o

    这些在像这样的通用规则中更有用:

    %.o : %.c
            $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
    

    请参阅this manual 了解更多信息。

    【讨论】:

    • 请注意,虽然以上两个示例可以与 GNU Make 一起使用,但它们不是可移植的。 POSIX 没有定义 % 规则,它只为后缀规则定义了 $opengroup.org/onlinepubs/009695399/utilities/make.html
    • 另一方面,如果您将自己限制在 GNU make 中,编写 Makefile 会变得容易得多。 (可移植到或多或少的所有现有平台)
    • (......等待有人告诉我 GNU 制作的哪些平台不可用......)
    • 它们在使用 VPATH 时也很重要,因为它们会扩展到找到源文件的目录。
    【解决方案2】:

    $@ 是当前规则的目标。 $&lt; 是当前规则的第一个先决条件(“源”)的名称。

    例如:

    .c.o:
            $(CC) -c $(CFLAGS) -o $@ $<
    

    这将扩展为类似以下的命令:

    gcc -c -Wall -o foo.o foo.c
    

    另请参阅GNU make manual § 10.5.3, "Automatic Variables"

    【讨论】:

    • 如果一个目标有多个源文件怎么办?
    • @MarcusJ 如答案中所述,$&lt;first 先决条件的名称。您可以点击其他自动变量($?$^$+$|)答案中的链接,这将为您提供的不仅仅是第一个先决条件。
    猜你喜欢
    • 1970-01-01
    • 2011-01-31
    • 2012-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-17
    • 2018-03-15
    • 2011-06-20
    相关资源
    最近更新 更多