Учебники

Makefile — Директивы

Существуют многочисленные директивы, доступные в различных формах. Программа 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, которая выглядит следующим образом: