「大きな」C プロジェクトをビルドするために使用するメイクファイルのセットがあります。現在、C++ プロジェクトでいくつかを再利用しようとしていますが、理解できないこの頭痛に遭遇しました。
メイクファイルはこんな感じ
SOURCES = \
elements/blue.cpp
# Dont edit anything below here
VPATH = $(addprefix $(SOURCE_DIR)/, $(dir $(SOURCES)))
CXXFLAGS = $(OPT_FLAGS) -MMD -MF $(BUILD_DIR)/$*.d -D_LINUX -DNDEBUG -pipe
DCXXFLAGS = $(DEBUG_FLAGS) -MMD -MF $(BUILD_DIR)/$*.d -v -D_LINUX -D_DEBUG -pipe
OBJECTS := $(patsubst %.cpp, $(BUILD_DIR)/Release/%.o, $(notdir $(SOURCES)))
DOBJECTS := $(patsubst %.cpp, $(BUILD_DIR)/Debug/%.o, $(notdir $(SOURCES)))
$(OBJECTS): $(BUILD_DIR)/Release/%.o: %.cpp
+@[ -d $(dir $@) ] || mkdir -p $(dir $@)
$(CPP) $(INCLUDE) $(CXXFLAGS) $(DEFINES) -o $@ -c $<
少し複雑ですが、C で行うことは、SOURCES で定義されたすべての %.c ファイルをビルドし、オブジェクト ファイルを BUILD_DIR に配置することです。c ではうまく機能しますが、cpp ファイルでは機能しません。私は得る
make: *** No rule to make target `blue.cpp', needed by `build/Release/blue.o'. Stop.
VPATH がまったく機能していないようです。私は試した
vpath %.cpp src/elements
しかし、それもうまくいきません。
驚くべきことに、blue.cpp の名前を blue.c に変更し、makefile を編集して %.c の使用法に戻しても問題なくコンパイルされます。
私はここで夢中になっていますか?