2013-07-16 17 views
0

我正在學習makefile,對某些語法以及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變量的引用。既然你沒有在這個makefile中設置它,它將會展開爲一個空字符串。關於名稱CPPFLAGS除了約定以外沒有特別的特別之處 - 它通常是您想要傳遞給c或C++編譯器的調用的C預處理器標誌的集合,這正是它在這裏使用的方式。

+0

在這種情況下,'CPPFLAGS'是「特殊的」,因爲make使用它的一些默認規則。 –