यह मेरा वर्तमान मेकफ़ाइल है।यह मेकफ़ाइल 'साफ करें' पर एक लक्ष्य निष्पादित क्यों करता है
CXX = g++
CXXFLAGS = -Wall -O3
LDFLAGS =
TARGET = testcpp
SRCS = main.cpp object.cpp foo.cpp
OBJS = $(SRCS:.cpp=.o)
DEPS = $(SRCS:.cpp=.d)
.PHONY: clean all
all: $(TARGET)
$(TARGET): $(OBJS)
$(CXX) $(CXXFLAGS) $(LDFLAGS) $(OBJS) -o $(TARGET)
.cpp.o:
$(CXX) $(CXXFLAGS) -c $< -o [email protected]
%.d: %.cpp
$(CXX) -M $(CXXFLAGS) $< > [email protected]
clean:
rm -f $(OBJS) $(DEPS) $(TARGET)
-include $(DEPS)
यह एक अपवाद के साथ पूरी तरह से काम करता है। यदि निर्देशिका (कोई * .D, * ओ) पहले से ही साफ है और मैं चलाने के 'स्वच्छ बनाने', इसे फिर से पैदा करता है निर्भरता, तो तुरंत उन्हें हटाता है:
[[email protected] proj]$ make
g++ -M -Wall -O3 foo.cpp > foo.d
g++ -M -Wall -O3 object.cpp > object.d
g++ -M -Wall -O3 main.cpp > main.d
g++ -Wall -O3 -c main.cpp -o main.o
g++ -Wall -O3 -c object.cpp -o object.o
g++ -Wall -O3 -c foo.cpp -o foo.o
g++ -Wall -O3 main.o object.o foo.o -o testcpp
[[email protected] proj]$ make clean
rm -f main.o object.o foo.o main.d object.d foo.d testcpp
[[email protected] proj]$ make clean
g++ -M -Wall -O3 foo.cpp > foo.d
g++ -M -Wall -O3 object.cpp > object.d
g++ -M -Wall -O3 main.cpp > main.d
rm -f main.o object.o foo.o main.d object.d foo.d testcpp
[[email protected] proj]$
मुझे समझ नहीं आता क्यों दूसरा 'साफ करें' निर्भरता फ़ाइलों को फिर से उत्पन्न करेगा। इससे कैसे बचा जा सकता है? यह इस प्रदूषित उदाहरण के लिए एक बड़ा सौदा नहीं है, लेकिन एक बड़ी परियोजना के लिए, यह काफी समय लेने वाला हो सकता है।
धन्यवाद।
आप किस ट्रैकिंग के लिए एक समाधान का वर्णन करता है http://mad-scientist.net/make/autodep.html को पढ़ने के लिए, चाहते हो सकता है निर्भरता कि इस समस्या से बचा जाता है, साथ ही आश्चर्यजनक रूप से कई अन्य जटिलताओं में शामिल हैं। – slowdog