DESTDIR และ PREFIX ของ make


120

ฉันกำลังพยายามติดตั้งซอฟต์แวร์ไปยังไดเร็กทอรีเฉพาะ ฉันพบหลายวิธี แต่ไม่แน่ใจว่ามีความแตกต่างกันอย่างไร

  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 stow ผ่าน

./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 คุณสามารถเลียนแบบ "case 4" (สำหรับการเก็บรักษา ฯลฯ ) โดยเรียกใช้cmake -DCMAKE_INSTALL_PREFIX=/foo/bar/baz -P cmake_install.cmakeในไดเร็กทอรี build
Ryan Pavlik

@JackKelly: ขอบคุณ! ฉันใช้ DESTDIR กับ GNU stow และต้องแก้ไขโครงสร้างไดเร็กทอรีด้วยการใช้mv usr/local/* . && rmdir usr/local && rmdir usrโดยทั่วไปprefix=จะดีกว่ามาก!
thinkki

หมายเหตุ: ซอฟต์แวร์บางส่วนไม่สนับสนุนDESTDIR=/tmp/foo make install; สำหรับโครงการที่ใช้ cmake ฉันมีโชคมากกว่าcmake -DCMAKE_INSTALL_PREFIX=/tmp/test1 -P cmake_install.cmakeที่ติดตั้งไปที่ /tmp/foo/{bin,...}; ดูตัวอย่างgithub.com/opencv/opencv/issues/11833#issuecomment-401164056
timotheecour

อีกหนึ่งหมายเหตุ: DESTDIRและprefixสามารถใช้make installร่วมกันได้เช่นmake install DESTDIR=/foo/bar/tmp perfix=/local.
albert

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

ในกรณีที่ไม่ได้ระบุไฟล์. / กำหนดค่าไว้คุณยังสามารถติดตั้งไปยังไดเร็กทอรีเฉพาะผู้ใช้โดยใช้: make prefix = / path / to / your / lib / libaio install
Good Will

0

จาก openssl/INSTALL

ผู้สร้างแพ็คเกจที่ต้องการกำหนดค่าไลบรารีสำหรับตำแหน่งมาตรฐาน แต่ติดตั้งแพคเกจไว้ที่อื่นเพื่อให้สามารถแพ็กเกจได้ง่ายสามารถใช้

$ make INSTALL_PREFIX=/tmp/package-root install

(หรือระบุ "--install_prefix = / tmp / package-root" เป็นตัวเลือกกำหนดค่า) คำนำหน้าที่ระบุจะนำหน้าชื่อไฟล์เป้าหมายการติดตั้งทั้งหมด

นี่ไม่ใช่มาตรฐาน แต่ INSTALL_PREFIX ถูกใช้ในโปรแกรมอื่น ๆ

ใช้ได้กับ OpenSSL เวอร์ชันก่อน 1.1.x 1.1.x OpenSSL DESTDIRและต่อมาก็มีความสามารถที่จะรับรู้ตามปกติ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.