如何从 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 $@
我有以下 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 $@