Makefile If-Then Else и Loops - PullRequest
       15

Makefile If-Then Else и Loops

54 голосов
/ 08 октября 2008

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

Ответы [ 4 ]

60 голосов
/ 08 октября 2008

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

Простой

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» устанавливается на это слово и выполняется текст.

16 голосов
/ 08 октября 2008

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

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

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

8 голосов
/ 08 октября 2008

Вы пробовали GNU make документацию ? Там есть целый раздел об условных выражениях с примерами.

4 голосов
/ 05 мая 2011

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

LIST_OF_THINGS_TO_DO = do_this do_that 
$(LIST_OF_THINGS_TO_DO): 
       run $@ > $@.out

SUBDIRS = snafu fubar
$(SUBDIRS):
     cd $@ && $(MAKE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...