Статические правила шаблонов против неявных правил
Статическое правило шаблона имеет много общего с неявным правилом, определенным как правило шаблона (см. Определение и переопределение правил шаблонов). Оба имеют шаблон для целевого файла и шаблоны для построения имен необходимых файлов. Разница заключается в том, как make определяет, когда правило применяется.
Неявное правило может применяться к любому целевому файлу, который соответствует его шаблону, но оно применяется только тогда, когда для целевого файла не указано никакого рецепта, и только тогда, когда необходимые файлы можно найти. Если несколько неявных правил кажутся применимыми, применяется только одно; выбор зависит от порядка правил.
В отличие от этого, статическое правило шаблона применяется к точному списку целевых файлов, который вы указываете в правиле. Оно не может применяться к другим целевым файлам, и оно всегда применяется к каждому из указанных целевых файлов. Если два конфликтующих правила применяются, и оба имеют рецепты, это ошибка.
Статическое правило шаблона может быть лучше, чем неявное правило по следующим причинам:
- Вы можете захотеть переопределить обычное неявное правило для нескольких файлов, имена которых нельзя классифицировать синтаксически, но которые можно указать в явном списке.
- Если вы не уверены в точном содержимом используемых каталогов, вы можете не быть уверены, какие другие нерелевантные файлы могут заставить
makeиспользовать неправильное неявное правило. Выбор может зависеть от порядка, в котором выполняется поиск неявных правил. При использовании статических правил шаблонов нет неопределенности: каждое правило применяется к точно указанным целевым файлам.
Copyright © 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Free Software Foundation, Inc.
Licensed under the GNU Free Documentation License.
https://www.gnu.org/software/make/manual/html_node/Static-versus-Implicit.html