“$<”的扩展错误makefile中的变量

时间:2015-08-22 03:58:53

标签: makefile gnu-make

makefile是:

$@ is: "foo"
$< is: "foo"



执行,我得到:

$<


为什么$@foo扩展到同一目标?

请记住,我们在这里:

  1. 文件$@,Make正在执行配方。 (因此,foo的扩展可以)
  2. 目标$<完全没有先决条件。 (因此,.DEFAULT : @echo '$$< is "$<"' @echo '$$@ is "$@"' 应扩展为字符串。)


  3. 为了让它更荒谬,让我们尝试下面的makefile:

    $ make .DEFAULT
    $< is ".DEFAULT"
    $@ is ".DEFAULT"
    


    正在运行,我们得到:

    $<


    真的,我们可以证明$@.DEFAULT扩展到相同的字符串(<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_scrollFlags="scroll|exitUntilCollapsed" /> </android.support.design.widget.AppBarLayout> <android.support.v7.widget.RecyclerView android:id="@+id/recycler_view" android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbars="vertical" app:layout_behavior="@string/appbar_scrolling_view_behavior" /></android.support.design.widget.CoordinatorLayout> ),当目标完全没有先决条件时,可以开始吗?

1 个答案:

答案 0 :(得分:1)

因为foo.DEFAULT$< will include implicit prerequisites的隐含先决条件。

  

第一个先决条件的名称。如果目标从隐式规则获得其配方,则这将是隐式规则添加的第一个先决条件(请参阅隐式规则)。