ทำการติดตั้ง แต่ไม่ใช่ไปยังไดเรกทอรีเริ่มต้นหรือไม่


148

ฉันต้องการเรียกใช้ 'ทำการติดตั้ง' ดังนั้นฉันจึงมีทุกอย่างที่ฉันต้องการ แต่ฉันต้องการให้มันติดตั้งสิ่งต่าง ๆ ในโฟลเดอร์ของตัวเองซึ่งตรงข้ามกับระบบ / usr / bin ฯลฯ เป็นไปได้ไหม แม้ว่ามันจะอ้างอิงถึงเครื่องมือใน / usr / bin เป็นต้น?


3
หากคุณสร้างโครงการแล้วและคุณรัน. / ตั้งค่าโดยไม่มีคำนำหน้าและคุณต้องการติดตั้งในเส้นทางที่กำหนดเองดูstackoverflow.com/a/17679654/313113
bitek

คำตอบ:


213

ขึ้นอยู่กับแพ็คเกจ หาก Makefile ถูกสร้างขึ้นโดยเครื่องมืออัตโนมัติของ GNU ( ./configure) คุณสามารถตั้งค่าตำแหน่งเป้าหมายได้ดังนี้:

./configure --prefix=/somewhere/else/than/usr/local

หาก Makefile ไม่ได้สร้างขึ้นโดยเครื่องมืออัตโนมัติ แต่กระจายไปพร้อมกับซอฟต์แวร์เพียงเปิดขึ้นในตัวแก้ไขและเปลี่ยน อาจมีการกำหนดไดเรกทอรีเป้าหมายการติดตั้งในตัวแปรที่อื่น


9
ไม่ควรmake && make installทำตามคำสั่งกำหนดค่า?
nass

1
ปัญหาที่ฉันมี--prefixคือถ้าคุณเรียกใช้stringsไบนารีที่เกิดขึ้นหลังจากนั้นคุณจะเห็นว่าเส้นทางถูกเก็บไว้ภายใน ฉันไม่รู้ว่าทำไมมันถึงเกิดขึ้น แต่ฉันไม่ต้องการเส้นทางของเครื่องบนไบนารีที่ฉันส่งให้กับผู้ใช้รายอื่น
Erik Aigner

เอริคดูเหมือนว่าจะมีการอ้างอิงไปยังเส้นทางที่คุณเรียกใช้ทำอย่างไรก็ตามถ้าคุณสร้างจากแหล่งที่มา
Konstantin Rybakov

44

เนื่องจากไม่ทราบว่า automake รุ่นใดที่คุณสามารถใช้ตัวแปรสภาพแวดล้อมDESTDIR
ดู Makefile เพื่อให้แน่ใจ

ตัวอย่างเช่น:

 export DESTDIR="$HOME/Software/LocalInstall" && make -j4 install

9
สิ่งนี้จะทำงานเมื่อคุณรันการกำหนดค่าโดยไม่มีอาร์กิวเมนต์บรรทัดคำสั่ง --prefix และคุณสร้างโครงการแล้ว แต่คุณไม่ต้องการติดตั้งในตำแหน่งเริ่มต้น แต่ระบุเส้นทางการติดตั้งแบบกำหนดเองแทน สิ่งนี้จะผนวกค่าเริ่มต้น usr / local / bin / path ไปยัง DESTDIR และโครงการของคุณจะได้รับการติดตั้งใน $ HOME / Software / LocalInstall / usr / local / bin /
bitek

นี่เป็นทางออกที่ยอดเยี่ยม ฉันไม่รู้ว่าทำไมนี่ไม่ใช่คำตอบที่เลือก! คำตอบอื่น ๆ เกือบทั้งหมดขอให้กำหนดค่าอีกครั้งซึ่งหมายความว่าเราจำเป็นต้องสร้างใหม่อีกครั้ง ลองนึกภาพหลังจากคอมไพล์ซูเปอร์บิลด์ของ MITK 2 ~ 3 ชั่วโมงแล้วขอให้ทำซ้ำเพราะฉันต้องการติดตั้งไฟล์ที่คอมไพล์แล้วไปยังตำแหน่งอื่น นี่เป็นงานที่ยอดเยี่ยมในการหลีกเลี่ยงสถานการณ์นั้น
Duck Dodgers

23
make DESTDIR=./new/customized/path install

คำสั่งด่วนนี้ทำงานสำหรับฉันสำหรับการติดตั้ง opencv รุ่น 3.2.0 บน Ubuntu 16 เส้นทาง DESTDIR สามารถสัมพันธ์กันได้ดี

การเปลี่ยนเส้นทางดังกล่าวยังมีประโยชน์ในกรณีที่ผู้ใช้ไม่มีสิทธิ์ของผู้ดูแลระบบตราบใดที่ตำแหน่ง DESTDIR มีสิทธิ์การเข้าถึงสำหรับผู้ใช้ เช่น / home //


1
อาจต้องแทนที่คำนำหน้าหากมีค่าเริ่มต้นใน makefile
ทำเครื่องหมาย Ch

17

อาจขึ้นอยู่กับสิ่งที่ได้รับการสนับสนุนโดยโมดูลที่คุณพยายามรวบรวม หาก makefile ของคุณถูกสร้างขึ้นโดยใช้ autotools ให้ใช้:

--prefix=<myinstalldir>

เมื่อเรียกใช้. / config

แพคเกจบางอย่างช่วยให้คุณสามารถแทนที่เมื่อทำงาน:

make prefix=<myinstalldir>

อย่างไรก็ตามหากคุณไม่ได้ใช้. / config คุณจะรู้ได้อย่างเดียวคือเปิดไฟล์ makefile และตรวจสอบ มันควรจะเป็นหนึ่งในตัวแปรสองสามตัวแรกที่อยู่ด้านบน


3
คุณควรทราบด้วยว่าmake prefix=...อาจส่งผลให้ระบบไบนารีที่มีเส้นทางที่ใช้รหัสผิดเนื่องจากไม่สามารถแก้ไขได้หลังจากนั้น./configure --prefix=...
Tobias Kienzler


0

ฉันลองแก้ไขปัญหาข้างต้น ไม่มีใครทำงาน

ในที่สุดฉันเปิดไฟล์ Makefile และเปลี่ยนเส้นทางคำนำหน้าด้วยตนเองเป็นเส้นทางการติดตั้งที่ต้องการเช่นด้านล่าง

PREFIX ?= "installation path"

เมื่อฉันพยายาม --prefix "make" บ่นว่าไม่มีคำสั่งอินพุตดังกล่าว อย่างไรก็ตามบางแพ็คเกจอาจยอมรับ --prefix ซึ่งแน่นอนว่าเป็นโซลูชันที่สะอาดกว่า


1
--prefixตัวเลือกคือการที่คุณโทรสอบถามก่อน./configure make
กัส

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