2012-07-03 19 views
77

मैं एक विशिष्ट निर्देशिका में सॉफ्टवेयर स्थापित करने की कोशिश कर रहा हूं। मुझे कई तरीकों से मिला, लेकिन यह सुनिश्चित नहीं है कि उनके बीच क्या अंतर है।DESTDIR और PREFIX बनाने के

  1. ./configure --prefix=***
  2. make install --prefix=***
  3. make install DESTDIR=***
  4. make install prefix=***

मैं इन चार के कार्यों के बारे उलझन में हूँ। क्या वे एक ही लक्ष्य प्राप्त करते हैं?

+0

दूसरे के लिए, मुझे यकीन नहीं है। कुछ पेज कहते हैं, "PREFIX इंस्टॉल करें", जबकि अन्य कहते हैं, "उपसर्ग स्थापित करें" और "इंस्टॉल करें --prefix"। मैंने अभी तक कोशिश नहीं की है। – Sean

+2

यह 'prefix = ... इंस्टॉल करें', [स्थापना निर्देशिकाओं के लिए चर] देखें [https://www.gnu.org/prep/standards/html_node/Directory-Variables.html#Directory-Variables) – Ggicci

+0

ये नहीं हैं बनाने में बनाया गया। सबसे पहले स्पष्ट रूप से बनाने के साथ कुछ भी नहीं है; दूसरा अमान्य है; तीसरा काम केवल तभी होता है जब मेकफ़ाइल DESTDIR का उपयोग करने के लिए लिखा गया हो। कुछ मेकफ़ाइल DESTDIR का समर्थन नहीं करते हैं या एक अलग नाम का उपयोग नहीं करते हैं (जैसे INSTALL_ROOT या INSTALL_PREFIX)। – davmac

उत्तर

122

संख्या 1 यह निर्धारित करता है कि पैकेज कहां स्थापित होगा, और यह कहां चलाए जाने पर संबंधित फाइलों को देखेगा। यदि आप केवल एक मेजबान पर उपयोग के लिए कुछ संकलित कर रहे हैं तो इसका उपयोग करना चाहिए।


संख्या 2 बस एक त्रुटि के रूप में तक मुझे पता है है।


संख्या 3 एक अस्थायी निर्देशिका जो जहां पैकेज से चलाया जाएगा नहीं है करने के लिए स्थापित करने के लिए है। उदाहरण के लिए इसका उपयोग deb पैकेजों के निर्माण के दौरान किया जाता है। पैकेज बनाने वाला व्यक्ति वास्तव में अपने सिस्टम पर अपने अंतिम स्थान पर सब कुछ स्थापित नहीं करता है। उसके पास पहले से ही एक अलग संस्करण स्थापित हो सकता है और इसे परेशान नहीं करना चाहते हैं, या वह रूट भी नहीं हो सकता है। तो वह

./configure --prefix=/usr 

उपयोग करता है ताकि कार्यक्रम जब यह, चलाता है तो

make install DESTDIR=debian/tmp 

वास्तव में निर्देशिका संरचना बनाने के लिए /usr में स्थापित किया जा करने की उम्मीद होगी।


संख्या 4 एक अलग जगह पर यह स्थापित करने के लिए, लेकिन के रूप में DESTDIR=/foo/bar/baz होगा सभी निर्देशिकाओं का निर्माण नहीं जा रहा है। यह आमतौर पर

./configure --prefix=/usr/local && make && sudo make install prefix=/usr/local/stow/foo 

, जो /usr/local/stow/foo/bin में बाइनरी स्थापित होगा के माध्यम से जीएनयू स्टो के साथ प्रयोग किया जाता है। तुलनात्मक रूप से,

make install DESTDIR=/usr/local/stow/foo 

/usr/local/stow/foo/usr/local/bin में बाइनरी स्थापित करेगा। शायद यह है कि संख्या 2 वास्तव में होना चाहिए था।

+38

बहुत अच्छा जवाब।एक चौथा मामला है जिसके बारे में नहीं पूछा गया है: 'prefix =/foo/bar/baz' इंस्टॉल करें। यह इसे एक अलग जगह पर स्थापित करने जा रहा है लेकिन सभी निर्देशिकाओं को 'DESTDIR =/foo/bar/baz' के रूप में नहीं बनाएगा। इसका उपयोग आमतौर पर जीएनयू स्टोव के साथ './configure --prefix =/usr/local && make && sudo install prefix =/usr/local/stow/foo' के माध्यम से किया जाता है, जो'/usr/local/stow/foo/bin'। ('DESTDIR =/usr/local/stow/foo' को तुलना करके,'/usr/local/stow/foo/usr/local/bin' में बाइनरी इंस्टॉल करें।) –

+6

इसके लिए क्या है, एक सेमेक में -निर्मित निर्माण आप निर्माण निर्देशिका में 'cmake -DCMAKE_INSTALL_PREFIX =/foo/bar/baz -P cmake_install.cmake' चलाकर" केस 4 "(स्टोव, आदि के लिए) का अनुकरण कर सकते हैं। –

+0

@ जैककेली: धन्यवाद! मैं जीएनयू स्टोव के साथ DESTDIR का उपयोग कर रहा हूं और मुझे 'mv usr/local/* के साथ निर्देशिका संरचना को ठीक करना पड़ा है। & rmdir usr/local && rmdir usr' आमतौर पर - 'prefix =' का उपयोग करना बहुत बेहतर है! –