我正在学习makefile,对于某些语法以及SUFFIXES的工作方式我有点困惑。
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”这一行实际上是做什么的?
我不太明白$&lt;手段。
CPPFLAGS来自哪里? (这是一个特殊的语法,只为make?)。
答案 0 :(得分:3)
.SUFFIXES
定义了可以理解后缀规则的后缀集。因此,通过此示例,您可以定义涉及后缀.o
.cpp
和.c
的后缀规则。如果您要定义规则.x.o
,因为.x
不在.SUFFIXES
列表中,它不是后缀规则 - 而是构建文件的规则.x.o
$<
是$(<)
的缩写,并扩展为当前规则中目标的第一个依赖关系。
$(CPPFLAGS)
是一个make变量引用。由于您没有在此makefile中设置它,它将扩展为空字符串。除了约定之外,名称CPPFLAGS
没有什么特别之处 - 它通常是要传递给c或c ++编译器的调用的C预处理器标志集,这正是它在这里使用的方式。 / p>