Может кто-нибудь объяснить, как использовать инструкции if-then и циклы в Make файлах? Кажется, я не могу найти хорошую документацию с примерами.
Makefile If-Then Else и Loops
Ответ 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)