Makefile模式规则的差异

时间:2015-06-05 11:51:45

标签: c++ c makefile

.cpp.o:.o:%.o: %.c之间的区别是什么? 这是一个简单的Makefile示例:

CC=g++
CFLAGS=-c -Wall
SOURCES=file1.cpp file2.cpp
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=program

$(EXECUTABLE): $(OBJECTS) 
    $(CC) $(OBJECTS) -o $@

#.o:
#.cpp.o:
%.o: %.c
    $(CC) $(CFLAGS) $< -o $@

all: $(SOURCES) $(EXECUTABLE)

clean:
    rm -rf $(OBJECTS) $(EXECUTABLE)

我注意到输出是相同的,但我猜它们在内部以不同的方式解释。 有没有一种首选的方法呢?

1 个答案:

答案 0 :(得分:3)

.cpp.o:    # build *.o from *.cpp (old style notation)

%.o: %.c   # build *.o from *.c (new style notation)

两种方法都有效但新风格更强大,因为它允许你通过模式匹配编写更复杂的结构:

%.uuu: %.vvv %.www