বেশিরভাগ উত্তরগুলি আশ্চর্যজনকভাবে জটিল বা ভুল। তবে সহজ এবং দৃ examples় উদাহরণ অন্য কোথাও পোস্ট করা হয়েছে [ কোডরিভিউ ]। স্বীকার করা যে gnu প্রিপ্রোসেসর দ্বারা প্রদত্ত বিকল্পগুলি কিছুটা বিভ্রান্তিকর। তবে বিল্ড টার্গেট থেকে সমস্ত ডিরেক্টরি মুছে ফেলা দলিলযুক্ত-MM
এবং কোনও বাগ [ জিপিপি ] নয়:
ডিফল্টরূপে সিপিপি মূল ইনপুট ফাইলের নাম নেয়, যে কোনও
ডিরেক্টরি উপাদান এবং যে কোনও ফাইল প্রত্যয় যেমন '। সি' মুছে ফেলে এবং প্ল্যাটফর্মের স্বাভাবিক অবজেক্ট প্রত্যয় যুক্ত করে।
(কিছুটা নতুন) -MMD
বিকল্পটি সম্ভবত আপনি চান। সম্পূর্ণতার জন্য এমন একটি মেকফিলের উদাহরণ যা একাধিক এসআরসি ডায়ারকে সমর্থন করে এবং কিছু মন্তব্য দিয়ে ডায়ার তৈরি করে। বিল্ড ডায়ার ছাড়াই সাধারণ সংস্করণের জন্য [ কোডরিভিউ ] দেখুন।
CXX = clang++
CXX_FLAGS = -Wfatal-errors -Wall -Wextra -Wpedantic -Wconversion -Wshadow
BIN = mybin
BUILD_DIR = ./build
CPP = main.cpp $(wildcard dir1/*.cpp) $(wildcard dir2/*.cpp)
OBJ = $(CPP:%.cpp=$(BUILD_DIR)/%.o)
DEP = $(OBJ:%.o=%.d)
$(BIN) : $(BUILD_DIR)/$(BIN)
$(BUILD_DIR)/$(BIN) : $(OBJ)
mkdir -p $(@D)
$(CXX) $(CXX_FLAGS) $^ -o $@
-include $(DEP)
$(BUILD_DIR)/%.o : %.cpp
mkdir -p $(@D)
$(CXX) $(CXX_FLAGS) -MMD -c $< -o $@
.PHONY : clean
clean :
-rm $(BUILD_DIR)/$(BIN) $(OBJ) $(DEP)
এই পদ্ধতিটি কাজ করে কারণ যদি একক লক্ষের জন্য একাধিক নির্ভরতা লাইন থাকে তবে নির্ভরতাগুলি কেবল যুক্ত হয়, যেমন:
a.o: a.h
a.o: a.c
./cmd
সমান:
a.o: a.c a.h
./cmd
যেমনটি উল্লেখ করা হয়েছে: একক লক্ষ্যের জন্য মেকফিল একাধিক নির্ভরতা লাইন?