Существуют многочисленные директивы, доступные в различных формах. Программа make в вашей системе может не поддерживать все директивы. Поэтому, пожалуйста, проверьте, поддерживает ли ваша марка директивы, которые мы здесь объясняем. GNU make поддерживает эти директивы.
Условные Директивы
Условные директивы —
-
Директива ifeq начинает условное выражение и определяет условие. Он содержит два аргумента, разделенных запятой и заключенных в скобки. Подстановка переменных выполняется для обоих аргументов, а затем они сравниваются. Строки make-файла, следующие за ifeq, выполняются, если два аргумента совпадают; в противном случае они игнорируются.
-
Директива ifneq начинает условное выражение и определяет условие. Он содержит два аргумента, разделенных запятой и заключенных в скобки. Подстановка переменных выполняется для обоих аргументов, а затем они сравниваются. Строки make-файла, следующие за ifneq, выполняются, если два аргумента не совпадают; в противном случае они игнорируются.
-
Директива ifdef начинает условное выражение и определяет условие. Он содержит один аргумент. Если данный аргумент является истинным, тогда условие становится истинным.
-
Директива ifndef начинает условное выражение и определяет условие. Он содержит один аргумент. Если данный аргумент является ложным, то условие становится истинным.
-
Директива else заставляет подчиняться следующие строки, если предыдущее условие не выполнено. В приведенном выше примере это означает, что вторая альтернативная команда связывания используется всякий раз, когда первая альтернатива не используется. Необязательно иметь другое в условном выражении.
-
Директива endif завершает условие. Каждое условие должно заканчиваться endif.
Директива ifeq начинает условное выражение и определяет условие. Он содержит два аргумента, разделенных запятой и заключенных в скобки. Подстановка переменных выполняется для обоих аргументов, а затем они сравниваются. Строки make-файла, следующие за ifeq, выполняются, если два аргумента совпадают; в противном случае они игнорируются.
Директива ifneq начинает условное выражение и определяет условие. Он содержит два аргумента, разделенных запятой и заключенных в скобки. Подстановка переменных выполняется для обоих аргументов, а затем они сравниваются. Строки make-файла, следующие за ifneq, выполняются, если два аргумента не совпадают; в противном случае они игнорируются.
Директива ifdef начинает условное выражение и определяет условие. Он содержит один аргумент. Если данный аргумент является истинным, тогда условие становится истинным.
Директива ifndef начинает условное выражение и определяет условие. Он содержит один аргумент. Если данный аргумент является ложным, то условие становится истинным.
Директива else заставляет подчиняться следующие строки, если предыдущее условие не выполнено. В приведенном выше примере это означает, что вторая альтернативная команда связывания используется всякий раз, когда первая альтернатива не используется. Необязательно иметь другое в условном выражении.
Директива endif завершает условие. Каждое условие должно заканчиваться endif.
Синтаксис условных директив
Синтаксис простого условного выражения без указания следующего:
conditional-directive text-if-true endif
Text-if-true может быть любыми строками текста, которые будут считаться частью make-файла, если условие истинно. Если условие ложно, текст не используется.
Синтаксис сложного условия следующий:
conditional-directive text-if-true else text-if-false endif
Если условие истинно, используется text-if-true; в противном случае используется text-if-false. Text-if-false может быть любым количеством строк текста.
Синтаксис условной директивы один и тот же, простой или сложный условный. Существует четыре разных директивы, которые проверяют различные условия. Они как дано —
ifeq (arg1, arg2) ifeq 'arg1' 'arg2' ifeq "arg1" "arg2" ifeq "arg1" 'arg2' ifeq 'arg1' "arg2"
Противоположными указаниями вышеуказанных условий являются:
ifneq (arg1, arg2) ifneq 'arg1' 'arg2' ifneq "arg1" "arg2" ifneq "arg1" 'arg2' ifneq 'arg1' "arg2"
Пример условных директив
libs_for_gcc = -lgnu normal_libs = foo: $(objects) ifeq ($(CC),gcc) $(CC) -o foo $(objects) $(libs_for_gcc) else $(CC) -o foo $(objects) $(normal_libs) endif
Директива включения
Директива include позволяет make приостанавливать чтение текущего make-файла и читать один или несколько других make-файлов перед продолжением. Директива — это строка в make-файле, которая выглядит следующим образом:
include filenames...
Имена файлов могут содержать шаблоны имен файлов оболочки. Дополнительные пробелы разрешены и игнорируются в начале строки, но вкладка не допускается. Например, если у вас есть три файла `.mk ‘, а именно,` a.mk’, `b.mk ‘и` c.mk’ и $ (bar), то он расширяется до bish bash, а затем выражение.
include foo *.mk $(bar) is equivalent to: include foo a.mk b.mk c.mk bish bash
Когда make обрабатывает директиву include, он приостанавливает чтение make-файла и читает по очереди из каждого указанного файла. Когда это закончится, make возобновляет чтение make-файла, в котором появляется директива.
Директива переопределения
Если переменная была установлена с аргументом команды, то обычные присваивания в make-файле игнорируются. Если вы хотите установить переменную в make-файле, даже если она была установлена с помощью аргумента команды, вы можете использовать директиву override, которая выглядит следующим образом: