【发布时间】:2015-11-05 14:21:03
【问题描述】:
我正在处理一个由其他开发人员编写的复杂 make 文件,这个 makefile 还包含其他 makefile。
我在 makefile 的开头放置了一个愚蠢的规则,然后调用了 makefile 而不指定一个目标,期望第一个规则只执行(这与某些东西相呼应),但我发现其他规则被调用了。
我想知道是否存在其他规则可能在第一条规则之前被评估的情况(可能是因为包含或二次扩展或其他)?
【问题讨论】:
我正在处理一个由其他开发人员编写的复杂 make 文件,这个 makefile 还包含其他 makefile。
我在 makefile 的开头放置了一个愚蠢的规则,然后调用了 makefile 而不指定一个目标,期望第一个规则只执行(这与某些东西相呼应),但我发现其他规则被调用了。
我想知道是否存在其他规则可能在第一条规则之前被评估的情况(可能是因为包含或二次扩展或其他)?
【问题讨论】:
make 看到的第一个(非模式非前导点)规则是默认目标(默认情况下)。无论是来自Makefile 还是某些包含的makefile 都无关紧要。
此外,makefile 可以通过设置 .DEFAULT_GOAL special variable 来覆盖它。
这在 GNU make 手册的How make Processes a Makefile 部分进行了讨论。
默认情况下,
make以第一个目标开头(不是名称以“.”开头的目标)。这称为默认目标。 (目标是最终努力更新的目标。您可以使用命令行(参见Arguments to Specify the Goals)或使用.DEFAULT_GOAL特殊变量(参见Other Special Variables))覆盖此行为。
【讨论】: