我有一個二進制文件,需要使用不同的編譯器標誌多次編譯。因此,我有,指出像一個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