0

我正在学习 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”行实际上是做什么的?

我不太明白 $< 是什么意思。

CPPFLAGS 来自哪里?(它是只用于 make 的特殊语法吗?)。

4

1 回答 1

3

.SUFFIXES定义 make 将理解后缀规则的后缀集。因此,通过此示例,您可以定义涉及后缀.o .cpp.c. 如果您要定义一个规则.x.o,因为.x不在.SUFFIXES列表中,它就不是后缀规则——而是构建文件的规则.x.o

$<是当前规则中目标的第一个依赖项的缩写$(<)并展开。

$(CPPFLAGS)是一个 make 变量引用。由于您没有在此 makefile 中设置它,因此它将扩展为一个空字符串。除了约定之外,这个名称没有什么特别的CPPFLAGS地方——它通常是您想要传递给 c 或 c++ 编译器调用的一组 C 预处理器标志,这正是它在此处使用的方式。

于 2013-07-16T07:03:28.487 回答