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

Огњ*_*јић 2 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
Run Code Online (Sandbox Code Playgroud)

以更通用的方式,如下所示:

SOURCES = main factorial hello

$(SOURCES).o: $(SOURCES).cpp
    g++ -c $(SOURCES).cpp
Run Code Online (Sandbox Code Playgroud)

我怎么做?

Bet*_*eta 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
Run Code Online (Sandbox Code Playgroud)

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

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

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

hello.o: hello.cpp
    g++ -c $< -o $@
Run Code Online (Sandbox Code Playgroud)

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

main.o factorial.o hello.o: %.o : %.cpp
    g++ -c $< -o $@
Run Code Online (Sandbox Code Playgroud)

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

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

$(OBJECTS): %.o : %.cpp
    g++ -c $< -o $@
Run Code Online (Sandbox Code Playgroud)