DESTDIR और PREFIX बनाने की


119

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

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

मैं इन तीनों के कार्यों को लेकर भ्रमित हूं। क्या वे एक ही लक्ष्य को प्राप्त करते हैं?

जवाबों:


185

./configure --prefix=***

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


make install DESTDIR=***

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

./configure --prefix=/usr

इसलिए /usrजब यह चलता है, तब यह प्रोग्राम स्थापित होने की उम्मीद करेगा

make install DESTDIR=debian/tmp

वास्तव में निर्देशिका संरचना बनाने के लिए।


make install prefix=***

नंबर 3 इसे एक अलग स्थान पर स्थापित करने जा रहा है, लेकिन जैसा DESTDIR=/foo/bar/bazकि सभी निर्देशिकाओं को नहीं बनाते हैं । यह आमतौर पर GNU स्टोव के माध्यम से उपयोग किया जाता है

./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


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

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

नोट: कुछ सॉफ्टवेयर समर्थन नहीं करता है DESTDIR=/tmp/foo make install; सीमेक आधारित परियोजनाओं के लिए, मेरे पास अधिक भाग्य था cmake -DCMAKE_INSTALL_PREFIX=/tmp/test1 -P cmake_install.cmakeजिसके साथ स्थापित होता है /tmp/foo/{bin,...}; उदाहरण के लिए github.com/opencv/opencv/issues/11833#issuecomment-401164056 देखें ।
टाइमोथेकोर

एक और नोट: DESTDIRऔर एक साथ, यानी prefixपर इस्तेमाल किया जा सकता है । make installmake install DESTDIR=/foo/bar/tmp perfix=/local
अल्बर्ट

1

इस के उपयोग को दर्शाता हुआ मदद कर सकते हैं DESTDIRऔर --prefix(से यहाँ ):

एकाधिक संस्थापन का उपयोग करते हुए --prefix और DESTDIR:

कॉन्फ़िगर समय पर प्रत्येक बिल्ड के लिए एक अलग - स्थान उपसर्ग / विकल्प को सुरक्षित करें। उदाहरण के लिए:

untar petsc tar ball
./configure --prefix=/opt/petsc/petsc-3.9.0-mpich --with-mpi-dir=/opt/mpich
make
make install DESTDIR=/tmp/petsc-pkg
untar petsc tar ball
./configure --prefix=/opt/petsc/petsc-3.9.0-openmpi --with-mpi-dir=/opt/openmpi
make
make install DESTDIR=/tmp/petsc-pkg

यदि ./configure फ़ाइल प्रदान नहीं की जाती है, तब भी कोई उपयोगकर्ता-विशिष्ट निर्देशिका का उपयोग करके इंस्टॉल कर सकता है: प्रीफ़िक्स = / पाथ / टू / योर / लिब / लिबियो इनस्टॉल
गुड विल

0

से openssl/INSTALL

पैकेज बिल्डरों जो मानक स्थानों के लिए पुस्तकालय को कॉन्फ़िगर करना चाहते हैं, लेकिन पैकेज कहीं और स्थापित किया है ताकि इसे आसानी से पैक किया जा सके, उपयोग कर सकें

$ make INSTALL_PREFIX=/tmp/package-root install

(या निर्दिष्ट विकल्प के रूप में "--install_prefix = / tmp / package-root")। निर्दिष्ट उपसर्ग को सभी इंस्टॉलेशन लक्ष्य फ़ाइलनामों से जोड़ा जाएगा।

यह गैर-मानक है लेकिन INSTALL_PREFIX का उपयोग कुछ अन्य कार्यक्रमों में किया जाता है।

यह 1.1.x से पहले ओपनएसएसएल संस्करणों के लिए काम करता है। ओपनएसएसएल 1.1.x और बाद में सामान्य रूप से पहचानने में सक्षम हैं DESTDIR

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.