2008-10-07 3 views
48

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

+0

Я добавляю «простые примеры». Документация в порядке, но человек - это абстрактные примеры! Для меня это еще вопрос. – Quickredfox 2012-06-12 23:23:24

ответ

51

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

Простой

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" 

If Not Equal Синтаксис

ifneq (arg1, arg2) 
ifneq 'arg1' 'arg2' 
ifneq "arg1" "arg2" 
ifneq "arg1" 'arg2' 
ifneq 'arg1' "arg2" 

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

ifdef variable-name 

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

ifndef variable-name 

Еогеасп Функция

Еогеасп Синтаксис функции

$(foreach var, list, text) 

Foreach Семантика
Для каждого пробела отделенный слово в «списке», переменная названа «вар» установлено значение этого слова и текст выполнен.

13

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

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

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

+1

Является ли `$ (OS)` предопределенной переменной GNU make? Если да, то, возможно, вы должны добавить его [здесь] (http://stackoverflow.com/q/714100/912144). – Shahbaz 2012-11-16 10:08:08

3

Вы часто видите циклы, но они обычно не нужны. Вот пример того, как можно выполнить цикл 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)