2010-07-09 11 views
16

प्रश्न: क्या सीएमके निर्माण स्क्रिप्ट उत्पन्न कर सकता है जो किसी भी तरह से, सीएमके का उपयोग नहीं करता है? यदि नहीं, तो सीएमके के खिलाफ कोई भी जांच न करने के लिए सीएमके जेनरेटेड ऑटोमैट स्क्रिप्ट को पकड़ना कितना मुश्किल है?क्या सीएमके निर्माण स्क्रिप्ट उत्पन्न कर सकता है जो * नहीं * cmake का उपयोग करता है?

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

स्पष्ट रूप से, मैं इसे दिन-प्रतिदिन उपयोग के लिए कभी नहीं करना चाहूंगा, लेकिन हमारे कोड की शाखा बनाने में आसानी से निर्माण करने की क्षमता होने के कारण सेमेक की आवश्यकता के बिना स्रोत से बनाया जा सकता है, जिससे मुझे मेरी मदद करने में मदद मिलेगी मामला।

+0

मुझे यह अजीब लगता है कि यहां दिए गए उत्तरों "नहीं" हैं। मैं सिर्फ सेमेक के साथ बिंदु पर जा रहा हूं कि मुझे यह समझना शुरू हो रहा है कि इसका उपयोग कैसे करें (इसे ऐसा करने के लिए मजबूर करने की कोशिश करने के बजाय इसे बनाने के लिए मजबूर करने की कोशिश करने के बजाय), जैसे आउट-ऑफ-सोर्स बिल्ड इत्यादि। लेकिन मैं पता है कि सेमेक को cpack के साथ बंडल किया गया है, जो लिनक्स और इसी तरह के टैरबॉल उत्पन्न कर सकता है। अगर एक टैरबॉल को सेमीकेक बनाने की आवश्यकता होती है, तो मुझे विश्वास नहीं है कि यह एक टैरबॉल है। – Steve314

+0

मैं सीपीएक्स पर नज़र डालेंगे;) – Voltaire

+3

सीपीएक्स द्वारा उत्पन्न टैरबॉल आमतौर पर इमारत के लिए स्रोत टैरबॉल नहीं हैं, बल्कि सिस्टम चलाने के लिए बाइनरी टैरबॉल हैं। – JesperE

उत्तर

5

नहीं, सीएमके ऐसा नहीं कर सकता है। यह वास्तव में समझ में नहीं आता है, क्योंकि बिल्ड-टाइम पर किसी भी सीएमकेक-समर्थन के बिना, सीएमकेलिस्ट.txt फ़ाइलों को बदलते समय मेकफ़ाइल/प्रोजेक्ट-फाइलों को स्वयं जांचने या अपडेट करने का कोई तरीका नहीं होगा।

यदि आप विजुअल स्टूडियो से सीएमके में जा रहे हैं, तो आप vcproj2cmake पर एक नज़र डालना चाहेंगे।

+1

यह वास्तव में एक "वांछित" परिणाम है - मुझे एक प्रकार का निर्माण "वितरित करने के लिए तैयार" उपकरण बनाने में दिलचस्पी है, जहां किसी भी प्रकार की सेमेक निर्भरताओं के बिना परियोजना बनाने के लिए उपयोग किया जा सकता है - उस बिंदु पर, यह ठीक है यदि परिवर्तन सीएमके में वापस नहीं दिखाई देते हैं। – Voltaire

+5

यह एक ऐसा मामला है जो सीएमके को संबोधित नहीं करता है। – JesperE

2

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

सीएमके के बारे में अच्छी चीजों में से एक यह चीजों को तेज़ी से बनाता है। एक स्क्रिप्ट की व्याख्या करने के लिए फोर्क खोल उदाहरणों को प्राप्त करने के लिए वास्तव में निर्माण प्रक्रिया को धीमा कर देता है।

3

सीएमके जेनरेट की गई फाइलें विभिन्न आदेशों जैसे कि बनाने/निकालने/आदि के लिए सेमेक पर निर्भर करती हैं ... न केवल बदलाव पर मेकफ़ाइल को पुन: उत्पन्न करने के लिए, इसलिए सेमेक को हटाने के लिए काम नहीं किया जा रहा है।

+2

+1 सीएमके को एक स्क्रिप्टिंग भाषा के रूप में भी इस्तेमाल किया जा सकता है (सीएमके मैनपेज में विकल्प "-पी" देखें), और कई परियोजनाएं शेल स्क्रिप्ट के प्रतिस्थापन के रूप में सीएमके का उपयोग करती हैं, जैसे फाइलों की प्रतिलिपि बनाने या सहायक कार्यक्रमों का आह्वान करना। इन परियोजनाओं को मेकफ़ाइल बनाने के लिए न केवल निर्माण समय पर सीएमके की आवश्यकता होगी। – sleske

-1

'परमाणु समाधान' के बारे में क्या?

# generate_moc.sh 
echo "generating moc file: moc ../include/GUICreator.h -o ../src/moc_GUICreator.cpp " 
moc ../include/GUICreator.h -o ../src/moc_GUICreator.cpp 
:

पूर्व- को स्वत: जनरेट CMakeLists.txt से एक "क्यूटी MOC" फ़ाइल है, तो परियोजना है कि कहाँ .sh फ़ाइल उत्पन्न किया जा रहा

# inside project level CMakeLists.txt 
# run shell script to create the "moc_GUICreator.cpp" auto-generated source file 
if(UNIX) 
execute_process(COMMAND "sh" ${CMAKE_CURRENT_SOURCE_DIR}/scripts/generate_moc.sh WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/scripts) 
endif(UNIX) 

.cpp फ़ाइल पर निर्भर करता है का निर्माण

समतुल्य विंडोज़ बैच फ़ाइल, "moc_creator_win.bat":

moc "GUICreator.h" -o "moc_GUICreator.cpp" 

इस एल आज़माया नहीं खिड़कियों में ast सा है, लेकिन यह या कुछ बहुत करीब से काम करना चाहिए, बस के बाद CMakeLists.txt में अगर (यूनिक्स) ब्लॉक:

if(WIN32) 
execute_process(COMMAND "cmd" ${CMAKE_CURRENT_SOURCE_DIR}/scripts/moc_creator_win.bat WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/scripts) 
endif(WIN32) 

तो, मूल रूप से यदि आप चतुर आप कर सकते हैं कर रहे हैं यदि आप एक से चाहते हैं जो कुछ भी लिपि के रूप में सीएमके चर का उपयोग करें और मुझे यकीन नहीं है कि आप और अधिक पूछ सकते हैं ...

बिंदु से बचने के लिए 'गैर-पोर्टेबल निर्माण प्रकार' जब तक आप वास्तव में एक विशेष संकलक में हैक करने की जरूरत है या क्यूटी डिजाइनर का उपयोग कर विगेट्स ;-)

+0

मुझे यकीन नहीं है कि यह मूल प्रश्न के लिए प्रासंगिक है। –

+0

बिंदु आप सीएमके को इरादे के रूप में या स्पेक्ट्रम के विपरीत छोर पर उपयोग कर सकते हैं, बस इसे मनमाने ढंग से स्क्रिप्ट के चारों ओर लपेटें। Cmake चरों को पार्स करने और जो भी मेकफ़ाइल आप चाहते हैं उसे उत्पन्न करने से रोकने के लिए कुछ भी नहीं है ... –

4

क्षमता जगह की तरह नहीं लग रहा है है ऐसा करने के लिए आपके ओएस पर निर्भर करता है, मैं यूनिक्स/मेकफ़ाइल या विंडरज़/एमएसवीसी मान रहा हूं। यदि आप एमएसवीसी का उपयोग कर रहे हैं, तो सेमेक निर्भरता को आपकी cmake स्क्रिप्ट की शुरुआत में CMAKE_SUPPRESS_REGENERATION विकल्प घोषित करके समाप्त किया जाना चाहिए।

SET(CMAKE_SUPPRESS_REGENERATION TRUE) 

यूनिक्स आधारित सिस्टम पर, तथापि, Makefiles tied स्पष्ट cmake कर रहे हैं फ़ाइलें (CMakeFiles, आदि) का निर्माण। मुझे संदेह है कि इस निर्भरता को मेकफ़ाइल निर्देशों से रणनीतिक टिप्पणी से बाधित किया जा सकता है, हालांकि, मैं यह नहीं कह सकता कि वे क्या हो सकते हैं।

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