假设我想改写这个:
main.o: main.cpp
g++ -c main.cpp
factorial.o: factorial.cpp
g++ -c factorial.cpp
hello.o: hello.cpp
g++ -c hello.cpp
以更通用的方式,如下所示:
SOURCES = main factorial hello
$(SOURCES).o: $(SOURCES).cpp
g++ -c $(SOURCES).cpp
我该怎么做?
答案 0 :(得分:6)
首先我们告诉编译器如何nme输出文件,以避免误解:
main.o: main.cpp
g++ -c main.cpp -o main.o
factorial.o: factorial.cpp
g++ -c factorial.cpp -o factorial.o
hello.o: hello.cpp
g++ -c hello.cpp -o hello.o
然后我们输入automatic variables,以减少冗余:
main.o: main.cpp
g++ -c $< -o $@
factorial.o: factorial.cpp
g++ -c $< -o $@
hello.o: hello.cpp
g++ -c $< -o $@
然后我们意识到这些规则看起来都一样,所以我们把它们组合成static pattern rule:
main.o factorial.o hello.o: %.o : %.cpp
g++ -c $< -o $@
然后我们使用变量来存储对象的名称:
OBJECTS := main.o factorial.o hello.o
$(OBJECTS): %.o : %.cpp
g++ -c $< -o $@