2012-11-20 8 views
28

मैं एक ऐसे प्रोजेक्ट पर काम कर रहा हूं जिसमें निर्माण (10-15) मिनट बनाने के लिए काफी समय लगता है। मैंने संकलन त्रुटि की पुष्टि करने के लिए पुनः संकलित किया है। अब मैं इंस्टॉल निर्देशिका को बदलना चाहता हूं ताकि मेरे पास नए बदलावों के साथ निष्पादन योग्य का नया संस्करण हो। क्या इंस्टॉल पथ को बस संशोधित करने का कोई तरीका है ताकि 'इंस्टॉल करें' पुराने स्थान की बजाय किसी नए स्थान पर इंस्टॉल हो?कॉन्फ़िगर स्क्रिप्ट/cmake को फिर से चलाए बिना इंस्टॉल-पथ को संशोधित करने के लिए

+0

संभावित डुप्लिकेट [इंस्टॉल करें - लेकिन डिफ़ॉल्ट निर्देशिकाओं के लिए नहीं?] (Http://stackoverflow.com/questions/3239343/make-install-but-not-to-default- निर्देशिकाएं) –

उत्तर

45

सीएमके जेनरफाइल मेकफ़ाइल के लिए DESTDIR coding convention का समर्थन करता है। इस प्रकार आप लागू कर पर DESTDIR चर सेट करके डिफ़ॉल्ट स्थापना स्थान ओवरराइड कर सकते हैं:

$ make install DESTDIR=/opt/local 

को फिर से चलाने के CMake कोई जरूरत नहीं है।

9

-DCMAKE_INSTALL_PREFIX=<somewhere different to last time> के साथ चलने वाले सीएमके को आपके प्रोजेक्ट को पुनः संयोजित करने की आवश्यकता नहीं होनी चाहिए। यदि आप सीएमके को अन्य कमांड लाइन पैरामीटर पास करते हैं जो उदा। कंपाइलर झंडे को बदलें, प्रभावित लक्ष्यों के पुनर्निर्माण को मजबूर करेगा, लेकिन बस इंस्टॉल उपसर्ग को बदलना नहीं होगा।

+0

क्या कोई तरीका है cmake rerunning बिना स्थापित उपसर्ग बदलें? ऐसा लगता है कि सीपीएक्स ऐसा करने में सक्षम है, लेकिन मुझे कुछ चर बनाने के लिए सीधे इसे करने का कोई तरीका नहीं दिख रहा है। अगर मैं अपने पैकेजर के साथ एक पैकेज बनाना चाहता हूं, तो मैं चीजों को/usr/local के बजाय/usr के अंतर्गत प्राप्त करना चाहता हूं, लेकिन मैं प्रोग्रामर से सही CMAKE_INSTALL_PREFIX के साथ cmake चलाने के लिए कहने के बिना काम करना चाहता हूं .. –

+0

ठीक है, आप अपने सीएमकेलिस्ट में 'सेट' का उपयोग कर सकते हैं।'CMAKE_INSTALL_PREFIX' के मान को हार्ड-कोड करने के लिए txt करें, लेकिन मुझे लगता है कि यह काफी असामान्य है और उन लोगों को पकड़ सकता है जो पहले से ही सीएमके के लिए उपयोग किए जाते हैं। हो सकता है कि एक बेहतर विकल्प आपके CMakeLists.txt में 'संदेश' मुद्रित करना होगा जो 'CMAKE_INSTALL_PREFIX' का वर्तमान मान प्रदर्शित करता है और यह भी मान देता है कि मूल्य को कैसे बदला जाए। कुछ संदेश की तरह कुछ ("इंस्टॉल पथ वर्तमान में $ {CMAKE_INSTALL_PREFIX} है") '' संदेश ("इस रन को बदलने के लिए: cmake। -DCMAKE_INSTALL_PREFIX = \" <नया इंस्टॉल पथ> \ "" ' – Fraser

4

बस अगर कोई सीएमके का उपयोग नहीं कर रहा है तो मेकफ़ाइल में ऐसा करने का एक तरीका है। अगर आपके पास अपनी बिल्ड निर्देशिका में मेकफ़ाइल.कॉन्फिग फ़ाइल उत्पन्न हुई है, तो prefix खोजें। यह prefixpath स्थापित है जहां द्विआधारी/शीर्षलेख इत्यादि स्थापित किए जाएंगे। इसे बदलने से बाइनरी/शीर्षलेख संशोधित path पर स्थापित हो जाएंगे।

16

मुझे नहीं पता कि यह आम तौर पर सच है या नहीं, लेकिन मैं 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[...]

7

DESTDIR और उपसर्ग के विहित परिभाषा है: फ़ाइलों $ DESTDIR $ उपसर्ग करने के लिए स्थापित है, लेकिन तैयार कर रहे हैं उनके अंतिम स्थापित स्थान के रूप में अगर सिर्फ उपसर्ग डॉलर था।

तो DESTDIR केवल उन लोगों के लिए है जो बाइनरी के पैकेज या टैरबॉल बनाते हैं; CMAKE_INSTALL_PREFIX किसी भी व्यक्ति के लिए है जो निर्दिष्ट करना चाहता है कि निर्मित बाइनरी को अंत में कहाँ रहना चाहिए।

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

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