Makefile:如何在规则的左侧使用变量?

时间:2013-09-13 00:08:42

标签: variables makefile

假设我想改写这个:

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

我该怎么做?

1 个答案:

答案 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 $@