2011-07-15 9 views
13

मैं लगभग एक सप्ताह तक सीएमके-सीपीएक्स से निराश हूं।सीएमके-सीपीएक्स पैकेज इंस्टॉलेशन पथ दुःस्वप्न

बुरी बात यह है कि सीएमके-सीपीएक्स ऑनलाइन दस्तावेज इस भाग को अच्छी तरह से दस्तावेज नहीं करता है।

CPACK_PACKAGING_PREFIX   # NOT documented 
CMAKE_INSTALL_PREFIX   # Documented, but the behavior seems weird 
CPACK_INSTALL_PREFIX   # NOT documented 
CPACK_PACKAGE_INSTALL_DIRECTORY # Documented, but this variable does NOT work as the online document described 
CPACK_PACKAGING_INSTALL_PREFIX # NOT documented 

मुझे क्या करना कोशिश कर रहा हूँ है:

googling के बाद, मैं इस चर का उपयोग करने के लिए मिला fakeroot make package, जब पैकेज sudo dpkg -i MyProgramPackageName द्वारा स्थापित किया गया है का उपयोग कर एक Debian पैकेज पैकेज, /usr/local करने के लिए इसे स्थापित करते हैं, के साथ एक उपनिर्देशिका MyProgramPackageName। यही है, सभी फाइलों को /usr/local/MyProgramPackageName-V.1.2.3 के तहत स्थापित किया जाना चाहिए।

मैं इन चरों को ट्यून करने के लिए (सीएमके 2.8.3 और सीएमके 2.8.5) कोशिश कर रहा हूं। मैंने इतने सारे संयोजनों की कोशिश की, लेकिन असफल रहा।

एक ही रास्ता सफल रहा है:

Set(CPACK_PACKAGING_INSTALL_PREFIX /usr/local/MyProgramPackageName-V.1.2.3) 

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

कृपया मुझे सलाह दें।

पीटर

उत्तर

0

CPACK द्वारा इस्तेमाल किया पथ अपने CMakeLists.txt फाइलों में इन्सटाल निर्देशों से लिया जाता है। यह परिणाम पैकेज को मिरर करने की अनुमति देता है जो 'इंस्टॉल करें' करेगा। यह सीपीएक्स कॉन्फ़िगरेशन को न्यूनतम रखता है।

तो, एक उदाहरण CMakeLists.txt फ़ाइल से:

INSTALL(TARGETS ${APPLICATION} DESTINATION bin) 

यह/usr/bin करने के लिए या/usr/स्थानीय/बिन स्थापित हो जाएगा। यदि आप सबडायरेक्टरी या पूरी तरह से अलग एक पर रखने करना चाहता था, तो आप इसे यहाँ

INSTALL(TARGETS ${APPLICATION} DESTINATION bin/myappdir) 
+0

मैं उलझन में हूं। मैं इसे पैकेज करने के लिए सीपीएक्स का उपयोग कर रहा हूं, ताकि यह ऐप इंस्टॉल करे जहां मैं चाहता हूं। 'इंस्टाल' निर्देश में, मैं हमेशा एक फ़ोल्डर या फ़ाइलों को INSTALL_PREFIX/DIRECTORY के सापेक्ष पथ पर स्थापित कर रहा हूं। –

+2

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

9

कर सकता है मैं किसी भी प्रलेखन इस समर्थन करने के लिए नहीं मिल रहा था, लेकिन मैं कुछ बग रिपोर्ट और ईमेल संग्रह है कि प्रतीत मिला सुझाव है कि निम्नलिखित तुम क्या कर किया जाना चाहिए:

set(CPACK_SET_DESTDIR true) 
set(CPACK_INSTALL_PREFIX /opt/MySuperAwesomePrefix-v.1.2.3)

CPACK_INSTALL_PREFIX सेट नहीं है, तो यह CMAKE_INSTALL_PREFIX लागू हो जाएगी। अब install(... DESTINATION dest) से सापेक्ष पथ आपकी पैकेज फ़ाइल के अंदर CPACK_INSTALL_PREFIX/dest के रूप में समाप्त हो जाएंगे। जब मैंने डेब फ़ाइल उत्पन्न करने का प्रयास किया तो यह काम करता था।

+0

मैं अगले सोमवार को आपके सुझाव का प्रयास करूंगा, और आपको परिणाम बता दूंगा। धन्यवाद। –

+2

मेरे लिए काम किया, धन्यवाद। – usr1234567

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