2013-07-16 1 views
0

Я узнаю о make-файлах и немного запутался в некоторых синтаксисах и о том, как работают SUFFIXES.Синтаксис Makefile

CPP = g++ 
OFLAG = -o 
.SUFFIXES : .o .cpp .c 
.cpp.o : 
    $(CPP) $(CPPFLAGS) -c $< 
.c.o : 
    $(CPP) $(CPPFLAGS) -c $< 

all: \ 
    Return \ 
     Declare \ 
    Ifthen \  
    Guess \ 
    Guess2 \ 

Return: Return.o 
    $(CPP) $(OFLAG)Return Return.o 

Deckare: Declare.o 
    $(CPP) $(OFLAG)Declare Declare.o 

# follow same format for other executables 

Return.o: Return.cpp 
Declare.o: Declare.cpp 

# follow same format for other executables 

Что делает линия «.SUFFIXES: .o .cpp .c» на самом деле?

Я не совсем понимаю, что такое $ <.

Откуда взялись CPPFLAGS? (это специальный синтаксис только для make?).

ответ

3

.SUFFIXES определяет набор суффиксов, которые будут понятны для правил суффикса. Таким образом, с помощью этого примера вы можете определить правила суффикса, содержащие суффиксы .o.cpp и .c. Если вы должны были определить правило .x.o, поскольку .x не в .SUFFIXES списке, это не будет правилом суффикса - это было бы вместо того, чтобы быть правилом для создания файла .x.o

$< короток для $(<) и расширяется к первой зависимости цели в текущем правиле.

$(CPPFLAGS) является ссылкой на переменную переменной. Поскольку вы не устанавливаете его в этом make-файле, он будет расширяться до пустой строки. Нет ничего особенного в том, что имя CPPFLAGS, кроме соглашения, - это, как правило, набор предпроцессорных флагов C, которые вы хотите передать на вызовы компилятора c или C++, что точно так же используется здесь.

+0

'CPPFLAGS' является« специальным »в этом случае, поскольку make включает его в ряд правил по умолчанию. –

Смежные вопросы