是否有简单的方法将单个配方应用于多个模式规则?Makefile多个模式的单个配方
考虑这个目录结构
|- src
| - file1.cpp
|- test
| - file2.cpp
| - file3.cpp
| - metrics
| - file4.cpp
| - file5.cpp
我想编写一个模式规则来编译test目录下的所有.cpp文件。这里是我现在有:
$(OBJS)/%.o: test/%.cpp
@mkdir -p $(OBJS)
g++ $(FLAGS) $(CPPFLAGS) -c $< -o [email protected]
$(OBJS)/%.o: test/metrics/%.cpp
@mkdir -p $(OBJS)
g++ $(FLAGS) $(CPPFLAGS) -I test -c $< -o [email protected]
TEST_CPP := $(wildcard test/*.cpp) $(wildcard test/**/*.cpp)
TEST_OBJ := $(addprefix $(OBJS)/,$(notdir $(TEST_CPP:.cpp=.o)))
$(BIN)/testRunner: $(TEST_OBJ)
@mkdir -p $(BIN)
g++ $(FLAGS) $(CPPFLAGS) $^ $(LIBS) -o [email protected]
我想避免重复的目标文件的食谱。我想象中的解决方案将是这个样子:
$(OBJS)/%.o: test/%.cpp
$(OBJS)/%.o: test/metrics/%.cpp
@mkdir -p $(OBJS)
g++ $(FLAGS) $(CPPFLAGS) -c $< -o [email protected]
(目前,该OBJ文件目录是平的,但是,我没有问题,复制源目录结构,如果他们简化了生成文件。)
是否有适用VPATH只有一定的规则的方法吗?假设我想为“test”.o文件使用不同的标志/库/包含,而不是“产品”.o文件。我可以为'$(OBJS)/ test /%。o'和'$(OBJS)/ production /%。o'设置不同的模式规则。但是,有没有办法将'$(OBJS)/ test'中的.o文件的模式匹配限制为'/ test'中的源文件? – Zack
'VPATH'是全局的,但你可以使用'vpath $(OBJS)/ test /%。o test'这样的'vpath'指令(同样也适用于生产)。 –
你不能像这样使用'vpath':'vpath'中的模式适用于你正在寻找的名字列表,而不是目标列表。换句话说,你的例子告诉make应该在'test'中查找.o文件,而不是'.cpp'文件。 – MadScientist