2008-12-27 16 views
79

मैं लिनक्स और विंडोज पर संकलित कोड के लिए ओपन सोर्स सी ++ प्रोजेक्ट पर काम कर रहा हूं। मैं लिनक्स पर कोड बनाने के लिए सीएमके का उपयोग करता हूं। विकास सेटअप और राजनीतिक कारणों की आसानी के लिए, मुझे विंडोज़ पर विजुअल स्टूडियो प्रोजेक्ट फाइल/एडिटर से चिपकना होगा (उदाहरण के लिए, मैं Code::Blocks पर स्विच नहीं कर सकता)। मैं here के रूप में, सीएमके का उपयोग कर विजुअल स्टूडियो फ़ाइलों को उत्पन्न करने के निर्देश देखता हूं।विजुअल स्टूडियो सी ++ प्रोजेक्ट फाइलें उत्पन्न करने के लिए सीएमके का उपयोग

क्या आपने पहले विजुअल स्टूडियो फ़ाइलों को उत्पन्न करने के लिए सीएमके का उपयोग किया है? आपका अनुभव कैसा रहा है? मान लीजिए कि मैं अपनी परियोजना में एक नई फाइल जोड़ना चाहता हूं। इसके लिए वर्कफ़्लो क्या है?

उत्तर

52

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

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

इसे केवल थोड़ा विचार और धैर्य की आवश्यकता है, लेकिन पहले गलतियां होंगी। लेकिन यदि आप दोनों तरफ continuous integration का उपयोग कर रहे हैं तो ये जल्दी ही हिलाएंगे, और अंततः लोग आदत में आ जाएंगे।

+9

ने ले जा सकता है कि यह सच था तो। CMakeLists.txt में किए गए किसी भी बदलाव से बिल्ड सिस्टम (विज़ुअल स्टूडियो, मेकफ़ाइल इत्यादि के लिए प्रोजेक्ट फाइल) का पुनर्जन्म होगा। विजुअल स्टूडियो के भीतर वर्कफ़्लो बहुत परेशान है क्योंकि विजुअल स्टूडियो प्रोजेक्ट फाइलों को पुन: उत्पन्न नहीं करता है, जब यह पता चलता है कि चीजें बदली गई हैं, लेकिन इसके बजाय एक ऐसा निर्माण करने की प्रतीक्षा करता है जिससे निर्माण को प्रकट करने की आवश्यकता हो क्योंकि निर्माण को फिर से हटा दिया जाना चाहिए प्रोजेक्ट फ़ाइल को लोड करें। – Vitali

+0

इस के लिए चेतावनी यह है कि आपको आईडीई के माध्यम से विजुअल स्टूडियो कंपाइलर चलाने की ज़रूरत नहीं है। आप इसे कमांड लाइन पर चला सकते हैं: 'C: \ ...> MSBuild ALL_BUILD.vcxproj' – PfunnyGuy

10

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

लेकिन यह काम करना काफी आसान है, और मुझे कोई भी समस्या नहीं है जिसमें सेमेक अमान्य फाइलें उत्पन्न हो रही हैं या ऐसा कुछ भी है, इसलिए मैं बहुत ज्यादा चिंता नहीं करता।

26

हमने अपने विभाग की बिल्ड श्रृंखला को सीएमके में स्थानांतरित कर दिया, और हमारे पास अन्य विभागों के बाद से कुछ आंतरिक रोडबंप थे जहां हमारी परियोजना फाइलों का उपयोग किया गया था और जहां उन्हें केवल उनके समाधान में आयात करने के आदी थे। हमें सीएमके के बारे में कुछ शिकायतें भी पूरी तरह से विजुअल स्टूडियो प्रोजेक्ट/सॉल्यूशन मैनेजर में एकीकृत नहीं किया गया था, इसलिए फ़ाइलों को मैन्युअल रूप से CMakeLists.txt में जोड़ा जाना था; यह वर्कफ़्लो लोगों में एक बड़ा ब्रेक था जिसका उपयोग किया जाता था।

लेकिन आम तौर पर, यह काफी चिकनी संक्रमण था। हम बहुत खुश हैं क्योंकि हमें अब परियोजना फाइलों से निपटने की ज़रूरत नहीं है।

एक परियोजना के लिए एक नई फ़ाइल जोड़ने के लिए ठोस कार्यप्रवाह वास्तव में सरल है:

  1. फ़ाइल बनाएँ, यह सही जगह में है सुनिश्चित करें।
  2. फ़ाइल को CMakeLists.txt में जोड़ें।
  3. बिल्ड करें।

सीएमके 2.6 स्वचालित रूप से फिर से चालू हो जाता है अगर किसी भी CMakeLists.txt फ़ाइलों को बदल दिया गया है (और (सेमी-) स्वचालित रूप से समाधान/परियोजनाओं को फिर से लोड करता है)।

याद रखें कि यदि आप आउट ऑफ़ स्रोत बना रहे हैं, तो आपको सावधान रहना होगा कि बिल्ड निर्देशिका में स्रोत फ़ाइल न बनाएं (क्योंकि विजुअल स्टूडियो केवल बिल्ड निर्देशिका के बारे में जानता है)।

6

CMake वास्तव में अच्छा दृश्य स्टूडियो .projs/.slns उत्पन्न कर सकते हैं, लेकिन वहाँ हमेशा के बजाय .proj/.sln.cmake फ़ाइलों को संशोधित करने की आवश्यकता के साथ समस्या है। अब यह रूप में, हम इस प्रकार के रूप में यह साथ काम कर रहे:

  1. सभी स्रोत फ़ाइलें उन्हें सिर्फ "लिंक" .filter में परिभाषित कर रहे हैं /src और दृश्य स्टूडियो में दिखाई देने वाली फ़ाइलें में जाते हैं।
  2. प्रोग्रामर परिभाषित /src निर्देशिका पर काम करने के लिए याद रखने वाली फ़ाइलों को जोड़ता/हटा देता है, डिफ़ॉल्ट प्रोजेक्ट का नहीं।
  3. जब वह पूरा हो जाता है, तो वह एक ऐसी स्क्रिप्ट चलाता है जो संबंधित .cmake फ़ाइलों को "रीफ्रेश" करता है।
  4. वह जांचता है कि कोड पुनर्निर्मित वातावरण में बनाया जा सकता है या नहीं।
  5. वह कोड करता है।

पहले तो हम यह कैसे बाहर हो जाएगा का एक छोटा डरते थे, लेकिन कार्यप्रवाह वास्तव में अच्छी तरह और अच्छा diff के साथ दिखाई दे रहा से पहले प्रत्येक प्रतिबद्ध, हर कोई आसानी से देख सकते हैं अपने परिवर्तनों को सही ढंग से .cmake फाइलों में मैप किए गए थे काम करता है।

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

+3

सीएमके 2.8.10 के रूप में, जेनरेट किए गए समाधानों में 4 कस्टमरी कॉन्फ़िगरेशन कॉन्फ़िगरेशन हैं, और अतिरिक्त कस्टम वाले को परिभाषित करने के लिए समर्थन है। – John

+0

@ जॉन धन्यवाद, जानना अच्छा है! –

36

सुनिश्चित नहीं हैं कि अगर यह सीधे प्रश्न से संबंधित है, लेकिन मैं कैसे cmake परियोजनाओं मुझे पता चला है कि एक कुछ इस तरह उपयोग कर सकते हैं से * .sln उत्पन्न करने के लिए के लिए एक जवाब के लिए देख रहा था:

cmake -G "Visual Studio 10" 

उदाहरण इनपुट वीएस 2010 फाइलों को एक इनपुट CMakeLists.txt फ़ाइल

+0

https://stackoverflow.com/questions/11269833/cmake-selecting-a-generator-within-cmakelists-txt @Ivan पर इंगित करता है कि इसे एक ही फ़ोल्डर में एक फ़ाइल में रखा जा सकता है Preload.cmake उसी फ़ोल्डर में आपके शीर्ष- स्तर CMakeLists.txt और फिर आप केवल 'cmake' कर सकते हैं। – PfunnyGuy

5

सीएमके दृश्य दृश्य स्टूडियो प्रोजेक्ट्स और सॉल्यूशंस को निर्बाध रूप से उत्पन्न करता है। आप विभिन्न विजुअल स्टूडियो संस्करणों के लिए सीएमके फाइलों में कोई बदलाव किए बिना परियोजनाओं/समाधान भी तैयार कर सकते हैं।

स्रोत फ़ाइलों को जोड़ना और निकालना सिर्फ CMakeLists.txt को संशोधित करने का विषय है जिसमें स्रोत फ़ाइलों की सूची है और परियोजनाओं/समाधानों को पुन: उत्पन्न करना है। निर्देशिका में सभी स्रोतों को खोजने के लिए यहां तक ​​कि एक ग्लोबिंग फ़ंक्शन भी है (हालांकि इसे सावधानी के साथ उपयोग किया जाना चाहिए)।

निम्न लिंक सीएमके और विजुअल स्टूडियो विशिष्ट व्यवहार को बहुत अच्छी तरह से बताता है।

CMake and Visual Studio

0

मैं अपने खुद के परियोजना, syncProj बुलाया शुरू कर दिया है। यहाँ से प्रलेखन/डाउनलोड लिंक:

https://docs.google.com/document/d/1C1YrbFUVpTBXajbtrC62aXru2om6dy5rClyknBj5zHU/edit# https://sourceforge.net/projects/syncproj/

आप विकास के लिए दृश्य स्टूडियो का उपयोग करने की योजना बना रहे, और वर्तमान में केवल सी ++ समर्थित है, तो।

अन्य मेक सिस्टम की तुलना में मुख्य लाभ यह है कि आप वास्तव में अपनी स्क्रिप्ट को डीबग कर सकते हैं, क्योंकि यह सी # आधारित है।

यदि आप सिंकप्रोज से परिचित नहीं हैं, तो आप बस अपने समाधान/प्रोजेक्ट को .cs स्क्रिप्ट में परिवर्तित कर सकते हैं, और उस बिंदु से आगे के विकास को जारी रख सकते हैं।

सेमीकेक में आपको स्क्रैच से सब कुछ लिखना होगा।