我有一个二进制文件,需要使用不同的编译器标志多次编译。因此,我有,指出像一个Makefile:Makefile来自同一源文件的多个目标,具有不同的标志
OBJECTS_A := $(addprefix $(OBJFOLDER)/, $(SOURCES:.cpp=.a.o))
OBJECTS_B := $(addprefix $(OBJFOLDER)/, $(SOURCES:.cpp=.b.o))
OBJECTS_C := $(addprefix $(OBJFOLDER)/, $(SOURCES:.cpp=.c.o))
我还定义了一个规则来更改标志每个OBJECTS_x:
$(OBJECTS_B): DEFINES+=-D_B
$(OBJECTS_C): DEFINES+=-D_C
而这正是问题的发生:如果我陈述分别为:
$(OBJFOLDER)/%.a.o: %.cpp
$(COMPILER) $(CFLAGS) $(INCFOLDER) $(DEFINES) -c $< -o [email protected]
$(OBJFOLDER)/%.b.o: %.cpp
$(COMPILER) $(CFLAGS) $(INCFOLDER) $(DEFINES) -c $< -o [email protected]
$(OBJFOLDER)/%.c.o: %.cpp
$(COMPILER) $(CFLAGS) $(INCFOLDER) $(DEFINES) -c $< -o [email protected]
所有的作品。不过,如果我合并所有的规则为一体,只有第一个评价:
$(OBJFOLDER)/%.a.o $(OBJFOLDER)/%.b.o $(OBJFOLDER)/%.c.o: %.cpp
$(COMPILER) $(CFLAGS) $(INCFOLDER) $(DEFINES) -c $< -o [email protected]
我得到一个预演是只有$(OBJFOLDER)/%AO对象被建立,但在关联规则。每个二进制文件都需要其对象(因此b和c二进制文件无法生成)。
任何想法? 谢谢!
具备多目标模式的模式规则意味着完全按照你所经历的:它期望配方的一次调用打造_ALL_目标。它在程序创建多个输出文件时使用。请参阅https://www.gnu.org/software/make/manual/html_node/Pattern-Intro.html(最后一段) – MadScientist