2

假设我想重写这个:

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

我怎么做?

4

1 回答 1

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

然后我们放入自动变量,以减少冗余:

main.o: main.cpp
    g++ -c $< -o $@

factorial.o: factorial.cpp
    g++ -c $< -o $@

hello.o: hello.cpp
    g++ -c $< -o $@

然后我们意识到这些规则看起来都一样,所以我们将它们组合为静态模式规则

main.o factorial.o hello.o: %.o : %.cpp
    g++ -c $< -o $@

然后我们使用一个变量来存储对象的名称:

OBJECTS := main.o factorial.o hello.o

$(OBJECTS): %.o : %.cpp
    g++ -c $< -o $@
于 2013-09-13T00:40:45.727 回答