这是一个简单的makefile。
我有两个问题。
“cpp.o:” 为什么不写“.o:.cpp”
CC=g++
CFLAGS=-c -Wall
LDFLAGS=
SOURCES=main.cpp hello.cpp factorial.cpp
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=hello
all: $(SOURCES) $(EXECUTABLE)
$(EXECUTABLE): $(OBJECTS)
$(CC) $(LDFLAGS) $(OBJECTS) -o $@
.cpp.o:
$(CC) $(CFLAGS) $< -o $@
答案 0 :(得分:1)
all
对$(SOURCES)
的依赖关系不是必需的,甚至没有用。依赖性信息应该是可执行文件依赖于目标文件,而目标文件依赖于源文件。
符号:
.cpp.o:
是make
的原始版本(第7版UNIX™)处理编译规则的方式。 GNU Make(和Sun Make)使用%
表示法来允许:
%.o: %.cpp
基本上,这是一个当时有意义的设计决策,回想起来可能没什么意义。这不是最令人震惊的问题(可能是命令行开头的标签)。