बनाने के लिए वैकल्पिक विकल्प? [बन्द है]


83

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

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


क्या इसका जवाब इस बात पर निर्भर नहीं करेगा कि समस्या क्या है? जिन चीजों के साथ मैंने करने की कोशिश की है, उनके लिए makeयह बहुत सरल है।
रीइनियरिएपोस्ट

रूबी रेक, कॉफ़ीस्क्रिप्ट केक, पायथन स्कोन, जावा एंट / मावेन, सी # MSBuild, क्रॉस-प्लेटफ़ॉर्म CMake
FilBot3


makefile संक्षिप्त है, लेकिन अपने आप में एक भाषा है। मुझे डिबग करना कठिन लगा। अजगर उपयोगकर्ताओं के लिए सहित कई संकुल देखते हैं scons, luigi(के लिए अनुकूलित shouldsee/luck), snakemake, waf। कई जावा विकल्प हैं, लेकिन उन सभी को लिखने के लिए यह स्थान बहुत छोटा है।
शूलदेस

मैंने अभी तक इसकी कोशिश नहीं की है, लेकिन github.com/casey/just कुछ आशाजनक लगता है, "विस्तृत त्रुटि संदेश पैदा करता है और मेकअप की आइडियोस्प्रेसी से बचा जाता है, इसलिए एक जस्टिफाइल को डीबग करना एक मेकफाइल को डीबग करने की तुलना में आसान और कम आश्चर्यजनक है
डॉ। जन-फिलिप गेर्के

जवाबों:


30

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


+1 स्कोनस के लिए - वैचारिक रूप से इतना ही समान है कि यह आपके सिर के चारों ओर ले जाना आसान है, लेकिन मेक के बारे में कुछ और बुरी तरह से टूटी हुई चीजों को ठीक करता है (जैसे नामों में रिक्त स्थान को संभालना)।
टॉम

5
SCons Python 2 ही है, और दिनों को बर्बाद करने के बाद Python और C ++ में लिखे गए प्रोजेक्ट के Python 3 संस्करण को संकलित करने के लिए SCons का उपयोग ट्रिंग करता है, मैं लोगों को दूर रहने की सलाह दूंगा। बस CMake का उपयोग करें, यह इस बिंदु पर C ++ के लिए मानक बन रहा है। या यदि आप पायथन-आधारित निर्माण प्रणाली का उपयोग करना चाहते हैं, तो मेसन का उपयोग करें । यह तेजी से चलता है और इसे सक्रिय रूप से विकसित किया जा रहा है, जिसे SCons के लिए नहीं कहा जा सकता है।
ओस्ट्रोकैच

SCons ने सितंबर 2017 से पायथन 3 का समर्थन किया है (उपरोक्त टिप्पणी लिखे जाने के 5 महीने बाद) और संस्करण 4.0 (जुलाई 2020) के बाद से केवल पायथन 3 है ।
माइकल प्लेटिंग्स

27

मेरे बहुत से मित्र हैं जो सीएमके द्वारा क्रॉस-प्लेटफॉर्म विकास के लिए शपथ लेते हैं:

http://www.cmake.org/

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

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


9
ध्यान दें कि CMake अभी भी केवल मेकफाइल्स उत्पन्न करता है। इसलिए अगर जीएनयू मेक के कार्यान्वयन में समस्या यह है कि यह कुछ ऐसा नहीं कर सकता है जो आप चाहते हैं, तो शायद सीएमके आपकी मदद नहीं करेगा। या ऑटोटूलस, उस मामले के लिए।
टॉम

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

19

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

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

1
इस उत्तर का धन्यवाद, doit एक अद्भुत उपकरण की तरह दिखता है
बेडरोस

16

गनोम की कुछ परियोजनाएं वफ़ में स्थानांतरित हो रही हैं ।

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


14

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

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

  • AAP (पायथन)
  • SCons (पायथन)
  • चींटी (जावा, एक्सएमएल में कॉन्फ़िगर, सुंदर जटिल)

7

ninjaबिल्ड टूल (v1.8.2 सितंबर 2017) से अवगत रहें जो कि tupऔर से प्रभावित है redo

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

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

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

ध्यान दें कि c / c ++ के लिए संकलन समय में सुधार कभी-कभी सीमित होता है क्योंकि प्रीप्रोसेसर (विशेष रूप से हेडर-केवल लिबास का उपयोग करते हुए, उदाहरण के लिए बढ़ावा देने और ईजेन के लिए ) हेडर शामिल होते हैं, जो उम्मीद है कि मॉड्यूल के प्रस्ताव द्वारा प्रतिस्थापित किया जाएगा (तकनीकी समीक्षा में) c ++ 11 या अंततः c ++ 1y में)। इस मुद्दे पर विवरण के लिए इस प्रस्तुति को देखें।


3
विशेष रूप से फ़्यूज़ कर्नेल एक्सटेंशन के चालू होने और होने tupपर निर्भर करता है fuse, जहाँ तक मेरा सवाल है कि यह सुझाव देता है कि अनुचर पागल हैं। redoदो वर्षों में अद्यतन नहीं किया गया है। मैं सुझा दूंगा ninja
mxcl

5

मैंने खातिर एक उपकरण लिखा था, जिसने लिखने-पढ़ने जैसी चीजों को लिखने और लिखने में बहुत आसान बनाने की कोशिश की।


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

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

तथ्य यह है कि यह YAML सिंटैक्स का उपयोग करता है उत्तर का हिस्सा होना चाहिए, शायद कुछ विस्तार के साथ कैसे YAML makeसिंटैक्स के साथ विरोधाभासी है ।
एरोन नोवस्त्रुप

मैं सिर्फ एक निर्माण स्क्रिप्ट के लिए खातिर इस्तेमाल किया और यह बहुत बढ़िया है। यह लिखने के लिए आपको धन्यवाद!
nooblar

खासा आश्चर्यजनक सरल है।
दान

4

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

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


2

रूबी की मेक सिस्टम को रेक कहा जाता है: http://rake.rubyforge.org/

काफी आशाजनक लग रहा है।

वहाँ हमेशा चींटी है: http://ant.apache.org , जो मुझे व्यक्तिगत रूप से भयावह लगता है। हालांकि, यह जावा विकास के लिए वास्तविक मानक है।


2

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

/ एलन


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

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

@ हमें vxxproj फ़ाइल पार्सर की प्रतिलिपि कहाँ मिल सकती है? मैं भी विंडोज पर एक छोटे से प्रोजेक्ट पर काम कर रहा हूं और ubuntu को पोर्ट करना चाहूंगा।
दान

@Maverick - मेरी क्षमायाचना, यह मालिकाना था और मैं वहाँ कोई काम नहीं करता। मुझे डर है कि इसे बनाने में जटिल बिल्ड सिस्टम के लिए तुच्छ नहीं है; जबकि वीएस कार्यक्षेत्र फ़ाइल "बस एक्सएमएल" है और यह पता लगाना है कि कौन सी स्रोत फ़ाइलों का निर्माण करना है और क्या विकल्प लागू करना बहुत भयानक नहीं है, आपको बिल्ड कॉन्फ़िगरेशन (डिबग, रिलीज़) को ध्यान में रखना होगा और यह भी कि समाधान और व्यक्तिगत परियोजनाएं कर सकते हैं अन्य msbuild फ़ाइलों को भी मनमाना आयात करें। एक अन्य विकल्प जिसे हमने माना था कि वह जीसीसी को लक्षित करने के लिए msbuild का उपयोग कर रहा था - और अब आपको यह आसान लग सकता है क्योंकि तब से msbuild बहुत परिपक्व हो गया है।
टॉम

1

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

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

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


0

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

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

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

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

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

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

चीयर्स,

लूटना


एक जटिल प्रश्न का सरल उत्तर संभव नहीं है। प्रश्न में अधिक ध्यान देने से मदद मिलेगी।
रॉब वेल्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.