สคริปต์ที่./configure
ยอมรับเลือก 3 --build
, และ--host
--target
ฉันสับสนบทบาทของพวกเขา อะไรคือความแตกต่างและความหมายของพวกเขา?
สคริปต์ที่./configure
ยอมรับเลือก 3 --build
, และ--host
--target
ฉันสับสนบทบาทของพวกเขา อะไรคือความแตกต่างและความหมายของพวกเขา?
คำตอบ:
ตามที่ระบุไว้ในบล็อกโพสต์นี้และพูดพาดพิงถึงในข้อตกลง GCC กำหนดค่า , --target
ใช้เฉพาะเมื่อคุณกำลังรวบรวม toolchains เมื่อคุณทำการคอมไพล์ข้ามไลบรารีหรือไบนารีตามปกติที่คุณใช้
--build=the architecture of the build machine
--host=the architecture that you want the file to run on
แต่เมื่อคุณกำลังสร้าง toolchains สิ่งที่ได้รับความซับซ้อนมากขึ้น ฉันคิดว่าสิ่งต่อไปนี้ถูกต้อง (แม้ว่าฉันจะไม่สามารถบอกได้ว่าฉันเคยรวบรวมโปรแกรมแก้ไขจุดบกพร่องด้วยตนเอง):
บอกว่าคุณมี:
คุณต้องกำหนดค่าและสร้างเซิร์ฟเวอร์การดีบัก (เช่น gdbserver) เพื่อทำงานบนอุปกรณ์ฝังตัวของคุณด้วย
./configure --build=powerpc --host=mips
เพื่อให้คุณสามารถฉาบไปยังอุปกรณ์ฝังตัวของคุณและเรียกใช้ "gdbserver: 1234 a.out" เพื่อเริ่มการดีบักและฟังบนพอร์ต 1234
จากนั้นคุณจะสร้างไคลเอ็นต์การดีบัก (ซึ่งเชื่อมต่อและควบคุม gdbserver) ด้วย
./configure --build=powerpc --host=i686 --target=mips
ซึ่งคุณจะคัดลอกไปยังแล็ปท็อป x86 ของคุณเพื่อให้คุณสามารถเรียกใช้ "gdbclient embed.device: 1234" ในฟิลด์เพื่อดีบักโปรแกรม a.out ของคุณ
ทั้งหมดนี้ใช้กับคอมไพเลอร์ด้วยเช่นกันซึ่งคุณอาจต้องการดูลิงก์ GCC ด้านบนหรือส่วนนี้เกี่ยวกับการคอมไพล์ข้ามแคนาดา
โปรดทราบว่าในทางปฏิบัติคุณอาจไม่เห็นบิลด์โฮสต์หรือเป้าหมายที่ระบุไว้เนื่องจากตามหน้าคู่มือ Autoconf "กำหนดเป้าหมายเริ่มต้นเป็นโฮสต์โฮสต์ที่จะสร้างและสร้างตามผลลัพธ์ของ config.guess"
ในคำสร้างรหัส--build
เรียกใช้--host
ด้วย--target
สภาพแวดล้อมสถาปัตยกรรม
หมายเหตุ:อาร์กิวเมนต์มี--target
เหตุผลเฉพาะเมื่อสร้างคอมไพเลอร์ (เช่น GCC) เมื่อทำงานconfigure
ก่อนสร้าง GCC:
--build
: เครื่องจักรที่คุณกำลังสร้าง--host
: เครื่องจักรที่คุณกำลังสร้าง--target
: เครื่องที่ GCC จะผลิตไบนารีให้จากเอกสาร GCC ( หมายเหตุการติดตั้งเฉพาะโฮสต์ / เป้าหมาย ):
หากบิลด์โฮสต์และเป้าหมายเหมือนกันทั้งหมดจะเรียกว่าเนทีฟ หากบิลด์และโฮสต์เหมือนกัน แต่เป้าหมายต่างกันสิ่งนี้เรียกว่าครอส หากบิลด์โฮสต์และเป้าหมายแตกต่างกันทั้งหมดสิ่งนี้เรียกว่าชาวแคนาดา (ด้วยเหตุผลที่คลุมเครือเกี่ยวกับพรรคการเมืองของแคนาดาและภูมิหลังของบุคคลที่ทำงานในการสร้างในเวลานั้น) หากโฮสต์และเป้าหมายเหมือนกัน แต่บิลด์ต่างกันคุณกำลังใช้คอมไพเลอร์ข้ามเพื่อสร้างเนทีฟสำหรับระบบอื่น บางคนเรียกสิ่งนี้ว่า host-x-host, cross native หรือ cross-built native หากบิวด์และเป้าหมายเหมือนกัน แต่โฮสต์ต่างกันคุณกำลังใช้คอมไพเลอร์ข้ามเพื่อสร้างคอมไพเลอร์ข้ามที่สร้างโค้ดสำหรับเครื่องที่คุณกำลังสร้าง นี่เป็นเรื่องที่หายากดังนั้นจึงไม่มีวิธีอธิบายทั่วไป มีข้อเสนอให้เรียกสิ่งนี้ว่า crossback
--target
ไม่เกี่ยวข้องกับโครงการใด ๆ ที่ไม่ใช่ตัวคอมไพเลอร์ เหตุใดจึงเป็นตัวเลือกกำหนดค่ามาตรฐาน ทำให้เกิดความสับสน
configure
ไม่ใช่จุดสุดยอดของการออกแบบที่ดีและสะอาด ฉันเดาว่ามันเป็นผลมาจากการคืบของฟีเจอร์เฉพาะแอปพลิเคชัน
--host
และ--build
. ฉันมีโปรเจ็กต์ C ++ สองโปรเจ็กต์และเป็นไปไม่ได้ที่จะสร้างสำหรับ Android เพราะ Autotools นั้นดีมาก ยืนยันในการดำเนินการทดสอบโดยใช้ toolchain ของโฮสต์