Spec-Zone.ru › GNU Make

Функции для условных выражений

Существует четыре функции, которые обеспечивают условное расширение. Ключевой аспект этих функций заключается в том, что не все аргументы расширяются изначально. Только те аргументы, которые необходимо расширить, будут расширены.

$(if condition,then-part[,else-part])

Функция if предоставляет поддержку условного расширения в функциональном контексте (в отличие от условных выражений в файлах make GNU, таких как make ifeq (см. Синтаксис условных выражений)).

Первый аргумент, condition, сначала очищается от всех начальных и конечных пробелов, затем расширяется. Если он расширяется до любой непустой строки, то условие считается истинным. Если он расширяется до пустой строки, условие считается ложным.

Если условие истинно, то второй аргумент, then-part, оценивается, и это значение используется в качестве результата вычисления всей функции if.

Если условие ложно, то третий аргумент, else-part, оценивается, и это результат работы функции if. Если третьего аргумента нет, функция if возвращает пустую строку.

Обратите внимание, что только один из then-part или else-part будет вычислен, никогда оба одновременно. Таким образом, любой из них может содержать побочные эффекты (такие как вызовы функции shell и т.д.)

$(or condition1[,condition2[,condition3…]])

Функция or обеспечивает операцию «короткого замыкания» OR. Каждый аргумент расширяется в порядке следования. Если какой-либо аргумент расширяется до непустой строки, обработка останавливается, и результатом расширения является эта строка. Если после расширения всех аргументов все они ложны (пустые), результатом расширения является пустая строка.

$(and condition1[,condition2[,condition3…]])

Функция and предоставляет операцию «короткого замыкания» AND. Каждый аргумент расширяется в порядке следования. Если какой-либо аргумент расширяется до пустой строки, обработка останавливается, и результатом расширения является пустая строка. Если все аргументы расширяются до непустых строк, результатом расширения является расширение последнего аргумента.

$(intcmp lhs,rhs[,lt-part[,eq-part[,gt-part]]])

Функция intcmp предоставляет поддержку числового сравнения целых чисел. Эта функция не имеет аналога среди условных выражений GNU make.

Левая часть, lhs, и правая часть, rhs, расширяются и анализируются как целые числа в десятичной системе счисления. Расширение оставшихся аргументов управляется тем, как левая числовая часть сравнивается с правой числовой частью.

Если дополнительных аргументов нет, функция расширяется до пустой строки, если левая и правая части не равны, или до их числового значения, если они равны.

В противном случае, если левая часть строго меньше правой части, функция intcmp оценивает расширение третьего аргумента, lt-part. Если обе части равны, функция intcmp оценивает расширение четвертого аргумента, eq-part. Если левая часть строго больше правой части, функция intcmp оценивает расширение пятого аргумента, gt-part.

Если gt-part отсутствует, он по умолчанию равен eq-part. Если eq-part отсутствует, он по умолчанию равен пустой строке. Таким образом, оба выражения ‘$(intcmp 9,7,hello)’ и ‘$(intcmp 9,7,hello,world,)’ оцениваются в пустую строку, в то время как ‘$(intcmp 9,7,hello,world)’ (обратите внимание на отсутствие запятой после world) оценивается в ‘world’.

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/Conditional-Functions.html

Spec-Zone.ru

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