2008-09-15 12 views
56

मैं कई सालों से मेक और मेकफ़ाइल का उपयोग कर रहा हूं, और हालांकि अवधारणा ध्वनि है, कार्यान्वयन में कुछ वांछित होना है।बनाने के विकल्प का वादा करना?

किसी को भी किसी भी अच्छा विकल्प में पाया गया कि समस्या overcomplicate नहीं करना है?

+0

क्या उत्तर दृढ़ता से इस बात पर निर्भर नहीं करेगा कि समस्या क्या है? जिन चीजों के साथ मैंने करने की कोशिश की है, उनके लिए 'मेक' बहुत सरल है। – reinierpost

+0

रूबी रेक, कॉफीस्क्रिप्ट केक, पायथन स्कॉन्स, जावा चींटी/मेवेन, सी # एमएसबिल्ड, क्रॉस-प्लेटफार्म सीएमके – Pred

उत्तर

23

जांच SCons। उदाहरण के लिए डूम 3 और ब्लेंडर इसका उपयोग करते हैं।

+0

स्कैन के लिए +1 - अवधारणात्मक रूप से पर्याप्त है कि यह आपके सिर को आसान बनाना आसान है लेकिन कुछ और बुरी तरह टूटी चीजों को ठीक करता है बनाने के बारे में (जैसे नामों में रिक्त स्थान हैंडलिंग)। – Tom

+0

स्कैन केवल पायथन 2 है, और पाइथन और सी ++ में लिखे गए एक प्रोजेक्ट के पाइथन 3 संस्करण को संकलित करने के लिए स्कैन का उपयोग करने के बाद स्कैन का उपयोग करने के बाद, मैं लोगों को दूर रहने की सलाह दूंगा। बस सीएमके का उपयोग करें, यह इस बिंदु पर सी ++ के लिए मानक बन रहा है। या यदि आप पाइथन-आधारित बिल्ड सिस्टम का उपयोग करना चाहते हैं, तो [मेसन] (http://mesonbuild.com/) का उपयोग करें। यह तेजी से चलता है और सक्रिय रूप से विकसित किया जा रहा है, जिसे स्कैन के लिए नहीं कहा जा सकता है। – ostrokach

0

रूबी के मेकअप प्रणाली रेक कहा जाता है: http://rake.rubyforge.org/

काफी होनहार लग रहा है। http://ant.apache.org है, जो मैं व्यक्तिगत रूप से खराब लगता है:

वहाँ हमेशा चींटी है। हालांकि, जावा विकास के लिए यह वास्तविक तथ्य है।

10

मैं Rake का उपयोग करने की सलाह देता हूं। यह मुझे मिला सबसे आसान उपकरण है।

अन्य अच्छा उपकरण मैं का उपयोग किया है, हालांकि, अगर रूबी अपने बात नहीं है, कर रहे हैं:

  • AAP (अजगर)
  • SCons (अजगर)
  • Ant (जावा, एक्सएमएल में config, सुंदर परिसर)
3

यह इस बात पर निर्भर करता है कि आप क्या करने की कोशिश कर रहे हैं। यदि सभी आप चाहते हैं कि शैली-शैली लक्ष्य निर्भरताएं और कमांड आमंत्रण करें, तो मेक वास्तव में कार्य के लिए बेहतर टूल में से एक है। :-) रेक बहुत अच्छा है, लेकिन कुछ साधारण मामलों के लिए बेकार हो सकता है। चींटी निश्चित रूप से वर्बोसिटी शहर है, लेकिन जावा जैसी भाषाओं (स्कैला और ग्रोवी शामिल) के निर्माण के लिए इसका बेहतर समर्थन है। इसके अलावा, चींटी हर जगह उपलब्ध है। इसका मुख्य कारण यह है कि मैं इसका उपयोग करता हूं। चूंकि यह लगातार विंडोज पर काम करता है, यह वास्तव में मेक से भी अधिक क्रॉस-प्लेटफॉर्म है।

आप जावा की तरह पुस्तकालयों के लिए निर्भरता प्रबंधन चाहते हैं, Maven विहित विकल्प है, लेकिन मैं व्यक्तिगत रूप से Buildr की तरह एक बहुत बेहतर है। यह अनुकूलित करने के लिए तेज़ और बहुत आसान है (यह रेक पर आधारित है)। दुर्भाग्यवश, यह अभी तक मावेन के रूप में सर्वव्यापी नहीं है।

25

मैं कौन पार मंच के विकास के लिए CMake कसम मित्रों के एक बहुत कुछ है:

http://www.cmake.org/

यह निर्माण प्रणाली VTK (बीच में अन्य बातों के) के लिए इस्तेमाल किया है, जो एक सी है पार के साथ ++ पुस्तकालय मंच पायथन, टीसीएल, और जावा बाइंडिंग्स। मुझे लगता है कि यह शायद कम से कम जटिल चीज है जो आपको कई क्षमताओं के साथ मिल जाएगी।

तुम हमेशा मानक autotools की कोशिश कर सकते। यदि आप केवल यूनिक्स पर चल रहे हैं और यदि आप सी/सी ++ पर चिपकते हैं तो ऑटोमैक फाइलें एक साथ रखकर बहुत आसान होती हैं। एकीकरण अधिक जटिल है, और autotools कभी भी सबसे सरल प्रणाली से बहुत दूर है।

+6

ध्यान दें कि सीएमके अभी भी मेकफ़ाइल उत्पन्न करता है। तो यदि जीएनयू मेक के कार्यान्वयन के साथ समस्या यह है कि यह कुछ भी नहीं कर सकता है, तो सीएमके शायद आपकी मदद नहीं करेगा। या उस मामले के लिए autotools। – Tom

+6

सीएमके सिर्फ मेकफ़ाइल उत्पन्न नहीं करता है। सीएमके विभिन्न कंपाइलर और प्लेटफार्मों को लक्षित करने वाली विभिन्न प्रकार की बिल्ड फाइलें उत्पन्न कर सकता है। व्यक्तिगत रूप से, मुझे सीएमके से नफरत है क्योंकि कॉन्फ़िगर सिंटैक्स बिल्कुल घृणित है। – Taywee

15

सूक्ति परियोजनाओं में से कुछ waf की ओर पलायन की है।

यह पायथन आधारित है, जैसे स्कॉन्स, लेकिन स्टैंडअलोन - अन्य डेवलपर्स को आपके पसंदीदा निर्माण उपकरण को स्थापित करने की आवश्यकता के बजाय, आप बस अपनी परियोजना में स्टैंडअलोन बिल्ड स्क्रिप्ट कॉपी करें।

-1

मुझे यकीन नहीं है कि आप यहां सही सवाल पूछ रहे हैं या नहीं।

क्या आप सरलीकृत बनाने के बाद हैं? इस मामले में, आपको किसी ऐसे व्यक्ति को प्राप्त करने की आवश्यकता है जो (एम | एम) एकेफाइल की श्रृंखला बनाने के लिए बहुत परिचित है जो आपकी समस्या को सरल बनायेगा।

या क्या आप अंतर्निहित तकनीक को देखना चाहते हैं? क्या हम डिज़ाइन-बाय-कॉन्ट्रैक्ट प्रकार आर्किटेक्चर को लागू करना चाहते हैं जो कोड डिज़ाइन में बनाया गया है, और लागू किया गया है? या संभवतः, भाषा स्वयं, उदा। एडा और चश्मा (इंटरफेस) और निकायों (कार्यान्वयन) की इसकी अवधारणा?

आप किस दिशा के बाद हैं, इस तरह के प्रश्न के संभावित परिणामों को निश्चित रूप से प्रभावित करेंगे?

असल में, केवल उन घटकों है कि वास्तव में डिजाइन द्वारा में बनाया इस तरह के तंत्र है कि नई प्रौद्योगिकियों के गोद लेने बनाम बदल दिया है से निर्माण सिस्टम के नए तरीके।

क्षमा करें यह प्रत्यक्ष उत्तर नहीं है। बस कोशिश करना चाहता था कि आप किस मार्ग का नेतृत्व करना चाहते हैं उसका मूल्यांकन करें।

चियर्स,

रोब

+0

एक जटिल प्रश्न का एक सरल जवाब संभव नहीं है। प्रश्न में अधिक ध्यान देने से मदद मिलेगी। –

1

मैं अभी भी विकल्प का एक समूह माना जाता करने के बाद करना पसंद करते हैं। जब आप कंपाइलर या फास्टडेप जैसे कुछ ऑटो-जेनरेटेड निर्भरता करते हैं तो ऐसा करने के लिए बहुत कुछ नहीं बचा है। विशेष रूप से मैं नहीं चाहता कि मेरी बिल्ड स्क्रिप्ट कार्यान्वयन भाषा से जुड़ी हो, और मुझे अधिक पठनीय विकल्प उपलब्ध होने पर XML में सामान लिखना पसंद नहीं है। एक सामान्य उद्देश्य भाषा का खुलासा करने वाला टूल योग्यता है, लेकिन फिर भी एक और व्याख्या की गई भाषा (afaik) नहीं है। What is Wrong with Make? मेक से दूर जाने के बारे में आपके दृष्टिकोण के लिए अपील कर सकता है।

/एलन

+0

मैं भी बनाना पसंद करता हूं; यह बोग मानक है, हर जगह उपलब्ध है, और इस परियोजना के लिए कोई भी नया मौका पहले (या कम से कम किसी और चीज़ से बेहतर मौका) का उपयोग करेगा। परंतु। मेरे पास एक बड़ा कोड बेस (कई हज़ार सी ++ स्रोत फाइलें) हैं जो विजुअल सी ++ के लिए लिखी गई हैं और जिन्हें मैं लिनक्स पर जीसीसी के तहत बिल्डिंग करने की कोशिश कर रहा हूं। निर्माण उपकरण के लिए स्पष्ट पसंद लगाना, और हमने एक त्वरित और गंदे कनवर्टर लिखा है जो vcxproj फ़ाइलों को पार्स करता है और मेकफ़ाइल बनाता है। यह सब अच्छा था, जब तक कि हम इसे नाम पर एक जगह के साथ एक परियोजना पर कोशिश नहीं की। हमसे क्या करने की अपेक्षा की जाती है? – Tom

+0

रिकॉर्ड के लिए, मैं SCons के साथ समाप्त हो गया है। चूंकि हमारे कनवर्टर को पायथन में वैसे भी लिखा गया था, इसलिए इसे इसके बजाय एक स्कैनस्क्रिप्ट में परिवर्तित करना बहुत आसान था। – Tom

10

doit एक अजगर उपकरण है। यह बिल्ड-टूल्स की अवधारणाओं पर आधारित है लेकिन अधिक सामान्य है।

  • आप परिभाषित कर सकते हैं कि कैसे एक कार्य/नियम अप-टू-डेट है
  • निर्भरता अन्य कार्यों
  • कार्य की कार्रवाई हो सकती है द्वारा गतिशील रूप से गणना की जा सकती है (बस टाइम स्टांप जाँच नहीं, फ़ाइलें की आवश्यकता नहीं है को लक्षित) अजगर कार्य या खोल आदेशों RTDA से
+0

इस उत्तर का धन्यवाद, डिट एक अद्भुत टूल की तरह दिखता है – Bedros

0

FlowTracer एक और अच्छा विकल्प है कि मैं एक बड़े पैमाने पर पर्यावरण (नौकरियों के हजारों) में व्यावसायिक तौर पर इस्तेमाल किया देखा है: http://www.rtda.com/flowtracer-design-flow-infrastructure-software

यह एक जीयूआई जो नौकरियों और फ़ाइलों के लिए अंडाकार के लिए कलर-कोडेड बक्से के साथ निर्भरता ग्राफ से पता चलता है। जब नौकरियों और फ़ाइलों की संख्या अधिक हो जाती है, तो फ़्लोट्रैसर जैसे जीयूआई-आधारित टूल काफी आवश्यक हैं।

प्रारंभिक सेटअप लागत बनाने से अधिक है। इसके उपयोग पहली प्रवाह की स्थापना के लिए एक सीखने की अवस्था है। उसके बाद, यह जल्दी हो जाता है।

4
ninja निर्माण उपकरण (v1.8 के प्रति सचेत रहें

।2 सितंबर 2017) जो tup और redo से प्रभावित है।

निर्माण फ़ाइल जनरेटर cmake (यूनिक्स Makefiles, विजुअल स्टूडियो, XCode, ग्रहण CDT के लिए उदाहरण के लिए, ...) भी ninja फ़ाइलों का निर्माण संस्करण 2.8.8 (अप्रैल 2012) और, afaik, ninja अब भी है के बाद से उत्पन्न कर सकते हैं डिफ़ॉल्ट निर्माण उपकरण cmake द्वारा उपयोग किया जाता है।

यह make उपकरण (बेहतर निर्भरता ट्रैकिंग और समानांतर भी है) से बेहतर प्रदर्शन करना है।

cmake पहले से ही एक अच्छी तरह से स्थापित उपकरण है। आप अपनी कॉन्फ़िगरेशन फ़ाइलों को संशोधित किए बिना बाद में बिल्ड टूल का चयन कर सकते हैं। तो यदि भविष्य में एक बेहतर निर्माण विकसित किया गया है जिसे cmake द्वारा समर्थित किया जाएगा तो आप इसे आसानी से स्विच कर सकते हैं।

ध्यान दें कि के लिए C/C++ संकलन समय में सुधार कभी कभी क्योंकि हेडर की सीमित है (विशेष रूप से जब हेडर केवल लिब्ज़ का उपयोग कर, उदाहरण के boost & eigen के लिए), जो उम्मीद है कि modules के प्रस्ताव (से बदल दिया जाएगा पूर्वप्रक्रमक के माध्यम से शामिल सी ++ 11 की तकनीकी समीक्षा में या अंततः सी ++ 1y में)। इस समस्या के विवरण के लिए यह presentation देखें।

+3

उल्लेखनीय रूप से 'tup' 'फ्यूज' पर निर्भर करता है और फ्यूज कर्नेल एक्सटेंशन चल रहा है, जहां तक ​​मुझे पता है कि रखरखाव करने वाले पागल हैं। 'redo' दो साल में अपडेट नहीं किया गया है। मैं 'निंजा' की सिफारिश करता हूं। – mxcl

4

मैंने sake नामक एक उपकरण लिखा जिसने लेखन को बनाने और लिखने के लिए मेकफ़ाइल जैसी चीजों को लिखने की कोशिश की।

+0

दिलचस्प; लेकिन क्या आप हमें थोड़ी सी जानकारी दे सकते हैं कि आपको क्यों लगता है कि "पढ़ना और लिखना" आसान है?हमें यह देखने के लिए प्रोजेक्ट इंस्टॉल करना नहीं चाहिए कि यह सवाल का जवाब दे। –

+0

ज़रूर! यह मुझे कारण बताता है कि क्यों मूल प्रश्न के लेखक मेक के कार्यान्वयन के बारे में चिंतित थे "समस्या को खत्म करना" मेकफ़ाइलों के अस्पष्ट वाक्यविन्यास के कारण था। Sake उन फ़ाइलों का उपयोग करता है जो YAML में लिखे गए हैं और, जो मैं अन्य लोगों के इनपुट से एकत्र करता हूं, पढ़ने और लिखने के लिए बहुत आसान है। – tonyfischetti

+0

तथ्य यह है कि यह वाईएएमएल सिंटैक्स का उपयोग करता है, इसका उत्तर शायद कुछ अंश के साथ होना चाहिए कि वाईएएमएल 'मेक' सिंटैक्स के साथ कैसे विरोधाभास करता है। –

संबंधित मुद्दे