私は別のコンパイラフラグで複数回ビルドする必要があるバイナリを持っています。私はまた、各OBJECTS_xのフラグを変更するには、ルールを定義メイクファイルは同じソースファイルから、異なるフラグで
OBJECTS_A := $(addprefix $(OBJFOLDER)/, $(SOURCES:.cpp=.a.o))
OBJECTS_B := $(addprefix $(OBJFOLDER)/, $(SOURCES:.cpp=.b.o))
OBJECTS_C := $(addprefix $(OBJFOLDER)/, $(SOURCES:.cpp=.c.o))
:したがって、私は何かを述べてMakefileを持って
$(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]
すべての作品。私は1つにすべてのルールをマージする場合は、最初に評価されます。私は予行演習に乗ることはAOオブジェクトが構築されているだけで$(OBJFOLDER)/%ということですが、リンクルールに
$(OBJFOLDER)/%.a.o $(OBJFOLDER)/%.b.o $(OBJFOLDER)/%.c.o: %.cpp
$(COMPILER) $(CFLAGS) $(INCFOLDER) $(DEFINES) -c $< -o [email protected]
各バイナリはそのオブジェクトを必要とします(したがって、bとcのバイナリはビルドに失敗します)。
アイデア? ありがとうございました!あなたはこのsecondary expansionを使用して達成することができます
複数のターゲットパターンを持つパターンルールは、あなたが経験してきたように、正確に意味:それはレシピの単一呼び出しが_all_ターゲットをビルドするために期待し、同じ1つの汎用パターンルール
(OBJFOLDER)/%.o: %.cpp
があなたのターゲットのすべてを構築することができます。この方法。これは、プログラムが複数の出力ファイルを作成するときに使用されます。 https://www.gnu.org/software/make/manual/html_node/Pattern-Intro.html(最後の段落) – MadScientist