मैं एक ऐसे प्रोजेक्ट पर काम कर रहा हूं जिसमें निर्माण (10-15) मिनट बनाने के लिए काफी समय लगता है। मैंने संकलन त्रुटि की पुष्टि करने के लिए पुनः संकलित किया है। अब मैं इंस्टॉल निर्देशिका को बदलना चाहता हूं ताकि मेरे पास नए बदलावों के साथ निष्पादन योग्य का नया संस्करण हो। क्या इंस्टॉल पथ को बस संशोधित करने का कोई तरीका है ताकि 'इंस्टॉल करें' पुराने स्थान की बजाय किसी नए स्थान पर इंस्टॉल हो?कॉन्फ़िगर स्क्रिप्ट/cmake को फिर से चलाए बिना इंस्टॉल-पथ को संशोधित करने के लिए
उत्तर
सीएमके जेनरफाइल मेकफ़ाइल के लिए DESTDIR coding convention का समर्थन करता है। इस प्रकार आप लागू कर पर DESTDIR
चर सेट करके डिफ़ॉल्ट स्थापना स्थान ओवरराइड कर सकते हैं:
$ make install DESTDIR=/opt/local
को फिर से चलाने के CMake कोई जरूरत नहीं है।
-DCMAKE_INSTALL_PREFIX=<somewhere different to last time>
के साथ चलने वाले सीएमके को आपके प्रोजेक्ट को पुनः संयोजित करने की आवश्यकता नहीं होनी चाहिए। यदि आप सीएमके को अन्य कमांड लाइन पैरामीटर पास करते हैं जो उदा। कंपाइलर झंडे को बदलें, प्रभावित लक्ष्यों के पुनर्निर्माण को मजबूर करेगा, लेकिन बस इंस्टॉल उपसर्ग को बदलना नहीं होगा।
क्या कोई तरीका है cmake rerunning बिना स्थापित उपसर्ग बदलें? ऐसा लगता है कि सीपीएक्स ऐसा करने में सक्षम है, लेकिन मुझे कुछ चर बनाने के लिए सीधे इसे करने का कोई तरीका नहीं दिख रहा है। अगर मैं अपने पैकेजर के साथ एक पैकेज बनाना चाहता हूं, तो मैं चीजों को/usr/local के बजाय/usr के अंतर्गत प्राप्त करना चाहता हूं, लेकिन मैं प्रोग्रामर से सही CMAKE_INSTALL_PREFIX के साथ cmake चलाने के लिए कहने के बिना काम करना चाहता हूं .. –
ठीक है, आप अपने सीएमकेलिस्ट में 'सेट' का उपयोग कर सकते हैं।'CMAKE_INSTALL_PREFIX' के मान को हार्ड-कोड करने के लिए txt करें, लेकिन मुझे लगता है कि यह काफी असामान्य है और उन लोगों को पकड़ सकता है जो पहले से ही सीएमके के लिए उपयोग किए जाते हैं। हो सकता है कि एक बेहतर विकल्प आपके CMakeLists.txt में 'संदेश' मुद्रित करना होगा जो 'CMAKE_INSTALL_PREFIX' का वर्तमान मान प्रदर्शित करता है और यह भी मान देता है कि मूल्य को कैसे बदला जाए। कुछ संदेश की तरह कुछ ("इंस्टॉल पथ वर्तमान में $ {CMAKE_INSTALL_PREFIX} है") '' संदेश ("इस रन को बदलने के लिए: cmake। -DCMAKE_INSTALL_PREFIX = \" <नया इंस्टॉल पथ> \ "" ' – Fraser
बस अगर कोई सीएमके का उपयोग नहीं कर रहा है तो मेकफ़ाइल में ऐसा करने का एक तरीका है। अगर आपके पास अपनी बिल्ड निर्देशिका में मेकफ़ाइल.कॉन्फिग फ़ाइल उत्पन्न हुई है, तो prefix
खोजें। यह prefix
path
स्थापित है जहां द्विआधारी/शीर्षलेख इत्यादि स्थापित किए जाएंगे। इसे बदलने से बाइनरी/शीर्षलेख संशोधित path
पर स्थापित हो जाएंगे।
मुझे नहीं पता कि यह आम तौर पर सच है या नहीं, लेकिन मैं the accepted answersakra
द्वारा एक आवेदन का उदाहरण दे सकता हूं, ठीक से काम नहीं करता है। आप जब ITK स्थापित करने DESTDIR
संशोधित करके स्थापित निर्देशिका संशोधित करते हैं, यह सिर्फ अपने पहले से ही स्थापित गठन पथ के लिए DESTDIR
संलग्न कर देगा:
make install DESTDIR=/opt/local
[...]
-- Installing: /opt/local/usr/local/lib/cmake/ITK-4.4/WrapITK/Configuration/Typedefs/itkRenyiEntropy[...]
दूसरी ओर this answerFraser
के बाद पुन: संकलन के बिना उचित स्थापित पथ होंगे:
cmake -DCMAKE_INSTALL_PREFIX=/opt/local /path/to/ITK_source
make install
[...]
-- Installing: /opt/local/lib/cmake/ITK-4.4/WrapITK/Configuration/Typedefs/itkRenyiEntropy[...]
DESTDIR और उपसर्ग के विहित परिभाषा है: फ़ाइलों $ DESTDIR $ उपसर्ग करने के लिए स्थापित है, लेकिन तैयार कर रहे हैं उनके अंतिम स्थापित स्थान के रूप में अगर सिर्फ उपसर्ग डॉलर था।
तो DESTDIR केवल उन लोगों के लिए है जो बाइनरी के पैकेज या टैरबॉल बनाते हैं; CMAKE_INSTALL_PREFIX किसी भी व्यक्ति के लिए है जो निर्दिष्ट करना चाहता है कि निर्मित बाइनरी को अंत में कहाँ रहना चाहिए।
संभावित डुप्लिकेट [इंस्टॉल करें - लेकिन डिफ़ॉल्ट निर्देशिकाओं के लिए नहीं?] (Http://stackoverflow.com/questions/3239343/make-install-but-not-to-default- निर्देशिकाएं) –