Spec-Zone.ru › GNU Make

Выполнение рецептов

При выполнении рецептов для обновления целевого объекта они выполняются путем вызова новой подоболочки для каждой строки рецепта, если не установлен специальный целевой объект .ONESHELL (см. Использование одной оболочки) (на практике, make может использовать сокращения, не влияющие на результаты.)

Обратите внимание: это подразумевает, что установка переменных оболочки и вызов команд оболочки, таких как cd, которые устанавливают контекст локально для каждого процесса, не повлияют на последующие строки в рецепте.3 Если вы хотите использовать cd для воздействия на следующее утверждение, поместите оба утверждения в одну строку рецепта. Тогда make вызовет одну оболочку для выполнения всей строки, и оболочка выполнит утверждения последовательно. Например:

foo : bar/lose
        cd $(<D) && gobble $(<F) > ../$@

Здесь мы используем оператор оболочки AND (&&) таким образом, что если команда cd завершится неудачно, сценарий завершится неудачно, не пытаясь вызвать команду gobble в неправильном каталоге, что может вызвать проблемы (в данном случае это, безусловно, приведет к усечению ../foo, по крайней мере).

• Одна оболочкаОдна оболочка для всех строк в рецепте.
• Выбор оболочкиКак 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/Execution.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API