में किसी प्रोजेक्ट के लिए मेकफ़ाइल के लिए निर्भरता उत्पन्न करता है मेरे पास एक प्रोजेक्ट है जिसमें टूटी निर्भरताओं के साथ मेकफ़ाइल है। क्या प्रोजेक्ट के लिए निर्भरताओं की एक सूची उत्पन्न करने का कोई सबसे अच्छा तरीका है जिसे मैं मेकफ़ाइल में उपयोग कर सकता हूं, प्रत्येक स्रोत फ़ाइल को हाथ से या हाथ से लिखित पर्ल स्क्रिप्ट के साथ जांचने के अलावा?सी/सी ++
सी/सी ++
उत्तर
http://make.paulandlesley.org/autodep.html का एक अच्छा समाधान है।
बिल्कुल। जी ++ -एमएम निर्भरताओं की जीएमके संगत सूची उत्पन्न करेगा।
# Add .d to Make's recognized suffixes.
SUFFIXES += .d
#We don't need to clean up when we're making these targets
NODEPS:=clean tags svn
#Find all the C++ files in the src/ directory
SOURCES:=$(shell find src/ -name "*.cpp")
#These are the dependency files, which make will clean up after it creates them
DEPFILES:=$(patsubst %.cpp,%.d,$(SOURCES))
#Don't create dependencies when we're cleaning, for instance
ifeq (0, $(words $(findstring $(MAKECMDGOALS), $(NODEPS))))
#Chances are, these files don't exist. GMake will create them and
#clean up automatically afterwards
-include $(DEPFILES)
endif
#This is the rule for creating the dependency files
src/%.d: src/%.cpp
$(CXX) $(CXXFLAGS) -MM -MT '$(patsubst src/%.cpp,obj/%.o,$<)' $< -MF [email protected]
#This rule does the compilation
obj/%.o: src/%.cpp src/%.d src/%.h
@$(MKDIR) $(dir [email protected])
$(CXX) $(CXXFLAGS) -o [email protected] -c $<
क्या ऐसा करेंगे स्वचालित रूप से प्रत्येक फ़ाइल बदल गया है कि के लिए निर्भरता उत्पन्न करते हैं, और जो कुछ के अनुसार उन्हें संकलन है आप जगह में नियम: मैं कुछ इस तरह का उपयोग करें। यह मुझे नई फाइलों को सिर्फ src/निर्देशिका में डंप करने की अनुमति देता है, और उन्हें स्वचालित रूप से निर्भरताओं और सभी में संकलित किया जाता है।
जीएनयू सी प्रीप्रोसेसर सीपीपी में एक विकल्प है, -एमएम, जो समावेशन पैटर्न के आधार पर निर्भरता के मेक-उपयुक्त सेट का उत्पादन करता है।
अब this portion in particular पढ़ना मुझे लगता है कि वहाँ एक बहुत ही आसान समाधान है, जब तक आपके पास जीसीसी/जी ++ का एक उचित संस्करण है। आप बस अपने CFLAGS
करने के लिए -MMD
जोड़ते हैं, तो एक चर OBJS
अपने सभी वस्तु फ़ाइलों का प्रतिनिधित्व करने को परिभाषित है, और फिर कार्य करें:
-include $(OBJS:%.o=%.d)
तो यह है कि आप दोनों एक कुशल और सरल स्वचालित निर्भरता निर्माण प्रणाली मिलना चाहिए।
मैं सिर्फ makefile को यह जोड़ सकते हैं और यह अच्छी तरह से काम करता है:
-include Makefile.deps
Makefile.deps:
$(CC) $(CFLAGS) -MM *.[ch] > Makefile.deps
मुझे पता है कि यह जवाब पुराना है, लेकिन यह '* .c' होना चाहिए, न कि' *। [Ch] '- कंपाइलर में प्रत्येक' * .h' में खींचने की आवश्यकता नहीं है - क्योंकि उन्हें कुछ लोगों द्वारा शामिल किया जाना चाहिए '.c' फ़ाइल (ओं) अगर उनका उपयोग बिल्कुल किया जाता है [और यदि वे नहीं हैं, तो निर्भरता कोई फर्क नहीं पड़ता]। –
क्या इसका प्रति-स्रोत निर्भरताओं पर कोई लाभ है?ऐसा लगता है कि आप सभी फाइलों पर प्रीप्रोसेसर पास की संख्या को दोगुना कर देंगे, वास्तविक लाभ के लिए। –
मेकफ़ाइल रेसिपी या कुछ समान उत्पन्न करने के लिए आउटपुट का पुन: उपयोग करने का कोई तरीका है? – PoVa
- 1. सीसी
- 2. सीसी
- 3. कॉल/सीसी
- 4. सीसी .NET
- 5. मेल सीसी
- 6. ईएसएस/एमैक्स में, मैं सीसी सीजे या सीसी सीआर
- 7. कॉल/सीसी क्या है?
- 8. पीएचपी मेल, सीसी फील्ड
- 9. स्कैला में "कॉल-सीसी" पैटर्न?
- 10. लिनक्स कर्नेल संकलित करते समय सीसी, एलडी और सीसी [एम] आउटपुट जैसे कोड क्या हैं?
- 11. यह जावास्क्रिप्ट वाक्यविन्यास क्या है: {सीआई, सीसी}?
- 12. एफएफएमपीजी चार सीसी एवी कोडेक समर्थन सूची?
- 13. मेकफ़ाइल में सीसी? = क्या मतलब है?
- 14. पीट में डीपी और सीसी कैसे बदलते हैं?
- 15. मेकफ़ाइल में सीसी और एलडी क्या खड़े हैं?
- 16. सीपीएएन को बनाने के लिए पथ और सीसी
- 17. काम करने के लिए सीसी-ट्रे प्राप्त करना
- 18. कोनों को समायोजित करें और छवि को खोलें सीसी
- 19. mountainlion अप्रैल के रूप में इस 'सीसी' कमी
- 20. रिकर्सन लागू करने के लिए कॉल/सीसी का उपयोग करना संभव है?
- 21. Emacs: कैसे स्वचालित रूप से सीसी मोड डेरिवेटिव में कोलन के बाद खाली स्थान शामिल करने
- 22. क्या कोई कारण है कि Google अपनी ओपन सोर्स प्रोजेक्ट्स में सीपीपी के बजाय सीसी एक्सटेंशन का उपयोग करता है?
- 23. सीसी के लिए कोई रास्ता है: माइक्रोसॉफ्ट टीम फाउंडेशन सर्वर में किसी बग/वर्क आइटम पर कोई?
- 24. सिंक जीआईटी और क्लीयरकेस
- 25. संरचना कोड के बारे में तलाश स्पष्टीकरण cyclomatic जटिलता को कम करने के
- 26. क्या मैं .NET 4 कोड अनुबंधों का उपयोग कर सकता हूं और .NET 3.5 के साथ संगत रह सकता हूं?
- 27. मैं नेंट से क्रूज़ कंट्रोल
- 28. Ontology में कक्षाएं/उदाहरण
- 29. मेरी वेबसाइट में CCavenue भुगतान गेटवे को एकीकृत करने के लिए कैसे?
- 30. प्रतिलिपि
इस जाल में गिर मत करो आप 100 से अधिक फ़ाइलें है, क्योंकि यह बहुत पहली बार धीमी गति से कर रहा है। इस मामले में, आपको एक बार उस चीज का उपयोग करना चाहिए जिसे एक बार बुलाया जाता है, प्रत्येक फ़ाइल के लिए एक बार नहीं। मेडेडपेन्शन में यह विकल्प हो सकता है। काम पर, हम एक कस्टम पर्ल स्क्रिप्ट का उपयोग करते हैं। –
धन्यवाद, मैं इसे ध्यान में रखूंगा। मेरी वर्तमान परियोजना में लगभग एक दर्जन फाइलें हैं, इसलिए इसमें बड़े ओवरहेड नहीं हैं। इसके अलावा, प्रारंभिक निर्माण में 20 मिनट से अधिक समय लगता है, इसलिए मैं हमेशा इसे चलाता हूं, कुछ कॉफी प्राप्त करता हूं, और इसके बाद वृद्धिशील बनाता है। –
धन्यवाद, यह वास्तव में मेरी मदद की। आप '$ (patsubst src /%, obj /%, $ (patsubst% .cpp,% o, $ <) लिख सकते हैं)' '$ (patsubst src /%। Cpp, obj /% o के रूप में थोड़ा सा सरल ' , $ <) '। साथ ही, आउटपुट को '> $ @' के साथ रीडायरेक्ट करने के बजाय विकल्प '-एमएफ $ @' विकल्प का उपयोग करने के लिए और अधिक समझदारी नहीं होगी? जी ++ मैन पेज आपको चेतावनी देता है कि स्टडआउट पर कुछ अवांछित डीबग आउटपुट हो सकता है, लेकिन आपको इसे '-एमएफ $ @ 'के साथ नहीं मिलता है। – Maarten