recompiling मैं मेकफ़ाइल सेट अप करने के तरीके सीख रहा हूँ, और एक समस्या में भाग गया है। इसे प्रदर्शित करने के लिए मैंने एक सरल "प्रोजेक्ट" बनाया है जिसमें स्रोत फ़ाइलों main.m
और test.m
शामिल हैं।मेकफ़ाइल हमेशा एक फ़ाइल
मैं इन फ़ाइलों (केवल यदि somethings परिवर्तित) संकलन, और वस्तु फ़ाइलों कहीं और में (यहाँ build/
) स्टोर करने के लिए बनाने के सेटअप करने के लिए कोशिश कर रहा हूँ
मेरे Makefile:
OBJ = ./build
SOURCES=main.m test.m
OBJECTS=$(addprefix $(OBJ)/,$(SOURCES:.m=.o))
EXECUTABLE=test
all: $(EXECUTABLE)
$(EXECUTABLE): $(OBJECTS)
gcc $(OBJECTS) -o $(EXECUTABLE)
$(OBJECTS): $(OBJ)/%.o: %.m build/
gcc -c $< -o [email protected]
build/:
mkdir build
जब मैं चलाने
gcc -c main.m -o build/main.o
gcc -c test.m -o build/test.o
gcc ./build/main.o ./build/test.o -o test
लेकिन अगर मैंचलाएँ: यह (केवल Makefile के साथ और मौजूदा निर्देशिका में सूत्रों का कहना है) पहली बार के लिए यह मैं इसे करने की उम्मीद क्या करता हैदोबारा:
gcc -c main.m -o build/main.o
gcc ./build/main.o ./build/test.o -o test
मैंने क्या गलत किया है? मेकफ़ाइल में किसी भी अन्य त्रुटियों को ध्यान में रखते हुए भी सराहना की जाती है, क्योंकि मैं "अच्छा" मेकफ़ाइल बनाने के लिए सीखने की कोशिश कर रहा हूं।
संपादित करें:
मैं make -d
से क्या देखा:
Finished prerequisites of target file `build/main.o'.
Prerequisite `main.m' is older than target `build/main.o'.
Prerequisite `build/' is older than target `build/main.o'.
No need to remake target `build/main.o'.
और
Finished prerequisites of target file `build/test.o'.
Prerequisite `test.m' is older than target `build/test.o'.
Prerequisite `build/' is newer than target `build/test.o'.
Must remake target `build/test.o'.
मुझे लगता है कि तुम सिर्फ '/' एक में 'build' से जुड़ी नहीं करना चाहते कुछ स्थानों पर। मैं इसे यहाँ आज़माएं। आप 'मेक-डी' का उपयोग यह देखने के लिए कर सकते हैं कि 'मेक' किस प्रकार निर्माण करने के बारे में अपने निर्णय ले रहा है, अगर इससे मदद मिलती है। –
धन्यवाद। हालांकि 'मेक-डी' मार्ग में थोड़ी देर लगने जा रही है क्योंकि यह जानकारी के 927 लाइनों को आउटपुट करता है :) – varesa
आप जितना निर्दोष नियमों को छिपाने के लिए इसे शांत कर सकते हैं। मैंने बस एक सरल परीक्षण परियोजना के साथ अपने मेकफ़ाइल की कोशिश की, और ऐसा लगता है कि यह अपेक्षित काम करता है। दूसरी तरफ, मैं बस 'मेक' प्राप्त करता हूं: 'सब' के लिए कुछ नहीं किया जाना चाहिए। –