如何从 Makefile 中的另一个规则中调用涉及“%”的规则?

How do you call a rule that involves `%` from another rule in a Makefile?

我有以下 makefile 片段来编译我的 C++ 项目。

obj/%.o: src/%.cpp
    $(CXX) $(CFLAGS) -c $< -o $@

现在我想要 link .o 个文件。但我希望能够只调用 link 的规则名称,例如 make build/main,以便编译 AND link.

这都不是:

build/main: $(wildcard obj/*.o)
    $(CXX) $^ -o $@

有效,因为它只有 link 并且无法编译,正如我所期望的 this answer;

也不是这个:

build/main: obj/%.o
    $(CXX) $^ -o $@

错误:

No rule to make target 'obj/%.o', needed by 'build/main'. Stop.

尽管需要。

SOURCES := $(wildcard src/*.cpp)
OBJECTS := $(patsubst src/%.cpp, obj/%.o, $(SOURCES))

build/main: $(OBJECTS)
    $(CXX) $^ -o $@