Функции для условных выражений
Существует четыре функции, которые обеспечивают условное расширение. Ключевой аспект этих функций заключается в том, что не все аргументы расширяются изначально. Только те аргументы, которые необходимо расширить, будут расширены.
$(if condition,then-part[,else-part])-
Функция
ifпредоставляет поддержку условного расширения в функциональном контексте (в отличие от условных выражений в файлах make GNU, таких какmakeifeq(см. Синтаксис условных выражений)).Первый аргумент, 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предоставляет поддержку числового сравнения целых чисел. Эта функция не имеет аналога среди условных выражений GNUmake.Левая часть, 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