Подтвердить что ты не робот

Makefile If-Then Else и Loops

Может кто-нибудь объяснить, как использовать инструкции if-then и циклы в Make файлах? Кажется, я не могу найти хорошую документацию с примерами.

4b9b3361

Ответ 1

Условные формы

Простой

conditional-directive
text-if-true
endif

Умеренно сложный

conditional-directive
text-if-true
else
text-if-false
endif

Более сложный

conditional-directive
text-if-one-is-true
else
conditional-directive
text-if-true
else
text-if-false
endif
endif

Условные директивы

Если равный синтаксис

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"

Если заданный синтаксис

ifdef variable-name

Если не определено синтаксис

ifndef variable-name  

функция foreach

foreach Синтаксис функции

$(foreach var, list, text)  

foreach Семантика
Для каждого разделенного пробела слова в "списке" переменная с именем "var" устанавливается на это слово и текст выполняется.

Ответ 2

Вот пример, если:

ifeq ($(strip $(OS)),Linux)
        PYTHON = /usr/bin/python
        FIND = /usr/bin/find
endif

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

Ответ 3

Пробовали ли вы документацию GNU? Он содержит целый раздел об условных обозначениях с примерами.

Ответ 4

Вы часто видите циклы, но обычно они не нужны. Вот пример того, как можно выполнить цикл for, не прибегая к оболочке

LIST_OF_THINGS_TO_DO = do_this do_that 
$(LIST_OF_THINGS_TO_DO): 
       run [email protected] > [email protected]

SUBDIRS = snafu fubar
$(SUBDIRS):
     cd [email protected] && $(MAKE)