की तुलना में विभिन्न निर्देशिका में आउटपुट बनाने के लिए पैटर्न बनाएं I मेकफ़ाइल बनाने की कोशिश कर रहा हूं जो मेरी स्रोत फ़ाइलों की तुलना में मेरी .o
फ़ाइलों को एक अलग निर्देशिका में रखता है। मैं एक पैटर्न नियम का उपयोग करने की कोशिश कर रहा हूं इसलिए मुझे प्रत्येक स्रोत & ऑब्जेक्ट फ़ाइल के लिए समान नियम बनाने की आवश्यकता नहीं है। ,जीएनयू स्रोत
OBJDIR_DEBUG = Debug
OBJ_DEBUG = $(OBJDIR_DEBUG)/src/main.o $(OBJDIR_DEBUG)/src/video.o
all: $(OBJ_DEBUG)
$(OBJ_DEBUG): %.o: %.cpp
$(CXX) $(CFLAGS_DEBUG) $(INC_DEBUG) -c $< -o [email protected]
यह काम नहीं करता है क्योंकि यह Debug/src/*.cpp
पर मेरे स्रोत फ़ाइलों के लिए लग रहा है:
project/
+ Makefile
+ src/
+ main.cpp
+ video.cpp
+ Debug/
+ src/ [contents built via Makefile:]
+ main.o
+ video.o
मेरे Makefile तरह दिखता है:
मेरे परियोजना संरचना की तरह कुछ लग रहा है।
मैं निम्नलिखित की कोशिश की है:
# Broken: make: *** No rule to make target `Debug/src/main.cpp', needed by `Debug/src/main.o'. Stop.
# As a test, works if I change "%.cpp" to "Debug/src/main.cpp", though it obv. builds the wrong thing
# Strip OBJDIR_DEBUG from the start of source files
$(OBJ_DEBUG): %.o: $(patsubst $(OBJDIR_DEBUG)/%,%,%.cpp)
$(CXX) $(CFLAGS_DEBUG) $(INC_DEBUG) -c $< -o [email protected]
# Broken:
# Makefile:70: target `src/main.o' doesn't match the target pattern
# Makefile:70: target `src/video.o' doesn't match the target pattern
# Add OBJDIR_DEBUG in target rule
OBJ = src/main.o src/video.o
$(OBJ): $(OBJDIR_DEBUG)/%.o: %.cpp
$(CXX) $(CFLAGS_DEBUG) $(INC_DEBUG) -c $< -o [email protected]
सबसे अच्छा तरीका है कि। – Beta
क्या होता है यदि आपके पास OBJDIR_DEBUG के भीतर उपनिर्देशिकाएं हैं? मेरा अनुमान है कि संकलन विफल हो जाएगा क्योंकि आउटपुट निर्देशिका मौजूद नहीं है। – aardvarkk