Как выполняются поиски в каталогах
Когда предварительное условие находится в результате поиска по каталогу, независимо от типа (общее или выборочное), путь к файлу, который может быть найден, может отличаться от того, что make фактически предоставляет вам в списке предварительных условий. Иногда путь, обнаруженный в результате поиска по каталогу, отбрасывается.
Алгоритм make использует для принятия решения о сохранении или отклонении пути, найденного в результате поиска по каталогу, следующим образом:
- Если целевой файл не существует по пути, указанному в файле make, выполняется поиск по каталогу.
- Если поиск по каталогу успешен, этот путь сохраняется, и этот файл временно сохраняется в качестве целевого.
- Все предварительные условия этого целевого объекта проверяются с использованием этого же метода.
- После обработки предварительных условий целевой объект может потребоваться или не потребоваться перестроение:
- Если целевой объект не нуждается в перестроении, путь к файлу, найденному в результате поиска по каталогу, используется для любых списков предварительных условий, которые содержат этот целевой объект. Короче говоря, если
makeне нуждается в перестроении целевого объекта, тогда вы используете путь, найденный в результате поиска по каталогу. - Если целевой объект нуждается в перестроении (устарел), путь, найденный в результате поиска по каталогу, отбрасывается, и целевой объект перестраивается с использованием имени файла, указанного в файле make. Короче говоря, если
makeнеобходимо перестроить, тогда целевой объект перестраивается локально, а не в каталоге, найденном в результате поиска по каталогу.
- Если целевой объект не нуждается в перестроении, путь к файлу, найденному в результате поиска по каталогу, используется для любых списков предварительных условий, которые содержат этот целевой объект. Короче говоря, если
Этот алгоритм может показаться сложным, но на практике он довольно часто является именно тем, что вам нужно.
Другие версии make используют более простой алгоритм: если файл не существует и найден в результате поиска по каталогу, то этот путь всегда используется, независимо от того, необходимо ли перестраивать целевой объект или нет. Таким образом, если целевой объект перестраивается, он создается по пути, обнаруженному в результате поиска по каталогу.
Если, фактически, вы хотите, чтобы такое поведение применялось ко всем или к некоторым вашим каталогам, вы можете использовать переменную GPATH для указания этого make.
GPATH имеет тот же синтаксис и формат, что и VPATH (то есть, список путей, разделенных пробелом или двоеточием). Если устаревший целевой объект найден в результате поиска по каталогу в каталоге, который также появляется в GPATH, то этот путь не отбрасывается. Целевой объект перестраивается с использованием расширенного пути.
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/Search-Algorithm.html