2012-09-02 14 views
19

मुझे बॉक्स 2 डी प्रोजेक्ट स्रोत मिला और इसके टेस्टबेड हिस्से को संकलित करना चाहते हैं। freeglu glui testbed (एक डेमो) helloword (एक डेमो) Box2D CMakeFilescmake क्या करता है .. करते हैं?

सभी भिन्न फ़ोल्डर में कई CMakeLists.txt हैं बिल्ड: परियोजना फ़ोल्डर जैसे फ़ोल्डरों में शामिल है। मैं सोच रहा था कि मुझे उन सभी फ़ाइलों को सेमेक करना चाहिए ताकि सभी जगहों पर फ़ाइलों को बनाया जा सके। मैं इस पढ़ा (के रूप में दिए गए निर्देशों का चाहते हैं ऐसा करने के लिए मैं चाहता हूँ):

wget http://box2d.googlecode.com/files/Box2D_v2.2.1.zip 
unzip Box2D_v2.2.1.zip 
cd Box2D_v2.2.1/Build 
cmake .. 
make 

cmake .. क्या करता है? बिल्ड फ़ोल्डर में कोई CMakeLists.txt नहीं है।

+0

लेकिन "Box2D_v2.2.1" फ़ोल्डर में एक CMakeLists.txt फ़ाइल होना चाहिए। "Cmake .." में, डबल बिंदीदार अंक कहते हैं कि CMakeLists.txt फ़ाइल निर्देशिका पदानुक्रम "Box2D_v2.2.1/Build /" में ऊपर एक निर्देशिका में मौजूद है। –

उत्तर

35

सेमीकेक मेकफ़ाइल जनरेटर है।

जब आप cmake [path] कहते हैं, आप इसे करने के लिए कह वर्तमान निर्देशिका निम्नलिखित कुछ संदेश [path]/CMakeLists.txt

आमतौर पर cmake उत्पादन में दी गई, जबकि यह काम कर रहा है निर्देश में एक Makefile उत्पन्न करते हैं, और उसके बाद यह त्रुटियों के बिना किया जाता है , आप अपने नव निर्मित मेकफ़ाइल निष्पादित करने के लिए "मेक" टाइप कर सकते हैं।

CMakeLists.txt फ़ाइलों उप-निर्देशिका में अन्य CMakeLists.txt फ़ाइल संदर्भित कर सकते हैं, तो आप आमतौर पर केवल CMakeLists.txt शीर्ष निर्देशिका के, नहीं अन्य लोगों द्वारा रुचि रखते हैं।

खाली "बिल्ड" निर्देशिका का उपयोग करना "आउट-ऑफ-सोर्स बिल्ड" नामक एक तकनीक है, जिसमें आपकी सभी जेनरेट की गई फ़ाइलें (.o, निष्पादन योग्य, मेकफ़ाइल, .anything) अलग "बिल्ड" निर्देशिका में उत्पन्न होती हैं और स्रोत फ़ाइलों के साथ मिश्रित नहीं है। यदि आप सभी को साफ़ करना चाहते हैं, तो आप बिल्ड निर्देशिका की सभी सामग्री को हटा सकते हैं।

असल में, आप किसी भी स्थान पर अपनी "बिल्ड" निर्देशिका डाल सकते हैं, जब तक आप शीर्ष CMakeLists.txt के सही पथ को cmake देते हैं। आप कई निर्माण निर्देशिका भी कर सकते हैं। यह बहुत उपयोगी है यदि आपको एक ही समय में कई अलग-अलग बिल्डों की आवश्यकता होती है (विभिन्न विकल्पों के साथ, जीसीसी के विभिन्न संस्करण इत्यादि)

पुराने कार्यक्रमों में, आप मेकफ़ाइल भी उत्पन्न करते हैं, लेकिन ./configure (इसे ऑटो- उपकरण। आप पहले से ही सामना कर सकते हैं)। सेमेक को ऑटो-टूल्स का उत्तराधिकारी माना जाता है।

+0

आह! आपका बहुत बहुत धन्यवाद! यह मेरे भ्रम को मंजूरी दे दी। मैंने cmakeLists.txt वाली फ़ाइल में सेमेक चलाने की कोशिश की थी, बिना फ़ाइल विनिर्देश के "cmake" टाइप करके और मैंने सोचा कि मैंने सेमीकेक का एक मैन पेज प्रदर्शित किया है। हो सकता है कि मैंने इसे सही तरीके से नहीं किया था। :) – batman

+0

यदि मैं इसे थोड़ा आगे बढ़ा सकता हूं, तो वास्तविक आदेश मैंने जो सोचा था उससे अलग थे। एक 'cmake -DBOX2D_INSTALL = ON -DBOX2D_BUILD_SHARED = ON' था .. बस' cmake .. 'के बजाय .. इसका क्या अर्थ है? – batman

+1

@learner हाँ। सेमेक आमंत्रण में विकल्प जोड़कर, आप इसे मेकफ़ाइल उत्पन्न करने के तरीके के बारे में संकेत देते हैं, शायद कुछ विशेषताओं को सक्रिय कर सकते हैं या एक अलग मोड का उपयोग कर सकते हैं। अधिकांश समय, आप "ccmake" टाइप करके उन विकल्पों को भी बदल सकते हैं। (दिमाग डॉट) अपने निर्माण डीआईआर में। इसके बाद मेकफ़ाइल पीढ़ी के विकल्पों की एक छोटी इंटरफ़ेस सूचीबद्ध होगी। – Offirmo

3

ठीक है, .. मूल फ़ोल्डर के लिए शॉर्टेंड है, इसलिए यह Box2D_v2.2.1 में जो कुछ भी पाता है उस पर संभवतः कार्य करेगा।

+0

@ एलेक्स फरबर और रूक, जब मैंने पैरेंट फ़ोल्डर में सेमेक की कोशिश की तो कुछ भी नहीं हुआ। इसने कुछ प्रकार के सेमेक की एक गाइड दी। और क्या यह 1 कदम गहरी और ऊपरी निर्देशिका को cmake में जाना आवश्यक है? – batman

+0

सीएमके का उपयोग करने की अनुशंसित विधि स्रोत से बाहर है जिसे आपने शुरुआत में cmake .. बिल्ड फ़ोल्डर में किया था। मैं इसे हराने की कोशिश नहीं करता। – drescherjm

+1

http://www.cmake.org/Wiki/CMake_FAQ#Out-of-source_build_trees – drescherjm

6

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

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