$ @如何在make条件下工作?

时间:2011-01-14 17:16:05

标签: makefile conditional

我正在使用GNU Make 3.80。在我的Makefile中,我使用自动变量$ @来引用当前目标。

    @echo current target is ... [$@]
ifeq ($@,sms)
    @echo yep, they are equal
else
    @echo no, they are not equal
endif

似乎$ @扩展为短信,如下面的输出所示。

输出是:

current target is ... [sms]
no, they are not equal

我的问题:因为$ @(显然)扩展为sms,不应该执行ifeq条件的“true”分支(结果是输出应该读取,它们是相等的)? [我不知道为什么输出不是,它们不相等。]

1 个答案:

答案 0 :(得分:4)

来自GNU Make manual

  

10.5.3自动变量   ...   你认识到这一点非常重要   自动范围有限   变量值可用:它们   只有配方中的值。   ...... GNU有一个特殊功能   制造,二次扩张(见   二级扩展),这将允许   要使用的自动变量值   在先决条件清单中。

也就是说,$@只能在包含命令的部分内部用于构建目标,并且在先决条件列表中有一些限制。

但是,您可以使用shell命令在用于构建目标的命令列表中实现条件:

    @echo current target is ... [$@]
    if [[ "$@" == "sms" ]]; then \
         echo yep, they are equal; \
    else \
         echo no, they are not equal; \
    fi

另外,如果要检查命令行中指定的目标,请使用MAKECMDGOALS变量。