जवाबों:
जैसा कि इस ब्लॉग पोस्ट में उल्लेख किया गया है और जीसीसी कॉन्फिग कंफर्म टर्म्स में दिया गया है , --target
केवल तब लागू होता है जब आप टूलकिन्स संकलन कर रहे होते हैं। जब आप किसी पुस्तकालय या बाइनरी के सामान्य क्रॉस-संकलन का उपयोग कर रहे होते हैं
--build=the architecture of the build machine
--host=the architecture that you want the file to run on
हालांकि, जब आप टूलचिन का निर्माण कर रहे होते हैं , तो चीजें अधिक जटिल हो सकती हैं। मुझे लगता है कि निम्नलिखित सही है (हालांकि मैं यह नहीं कह सकता कि मैंने कभी क्रॉस-डिबगर संकलित किया है):
कहते हैं कि आपके पास है:
आप कॉन्फ़िगर करेंगे और अपने डीबगिंग सर्वर (जैसे gdbserver) को अपने एम्बेडेड डिवाइस पर चलाने के लिए बनाएंगे
./configure --build=powerpc --host=mips
ताकि आप अपने एम्बेडेड डिवाइस पर पोटीन लगा सकें और डिबगिंग शुरू करने और पोर्ट 1234 को सुनने के लिए "gdbserver: 1234 a.out" चलाएं।
फिर आप अपने डिबगिंग क्लाइंट (जो कि gdbserver से कनेक्ट और नियंत्रित करता है) का निर्माण करेंगे
./configure --build=powerpc --host=i686 --target=mips
जिसे आप अपने x86 लैपटॉप में कॉपी कर लेंगे ताकि आप अपने a.out प्रोग्राम को डीबग करने के लिए "gdbclient एम्बेडेड .device: 1234" चला सकें।
यह सब कंपाइलर पर भी लागू होता है जिसके लिए आप ऊपर दिए गए जीसीसी लिंक या कनाडाई क्रॉस कंपाइल के बारे में इस सेक्शन को देखना चाहते हैं ।
यह भी ध्यान दें कि, व्यवहार में, आप ऑटोकॉन्फ़ मैनुअल पेज के अनुसार, बिल्ड, होस्ट या लक्ष्य को निर्दिष्ट नहीं देख सकते हैं , "config.guess के परिणाम के लिए होस्ट करने, निर्माण करने और होस्ट करने के लिए लक्ष्य डिफॉल्ट्स।"
एक शब्द में, कोड का निर्माण करें --build
, इसे वास्तुकला वातावरण के --host
साथ चलाएं --target
।
नोट: तर्क --target
केवल तभी समझ में आता है जब संकलक (जैसे जीसीसी) का निर्माण होता है। configure
जीसीसी के निर्माण से पहले चलने पर :
--build
: आप जिस मशीन पर निर्माण कर रहे हैं--host
: जिस मशीन के लिए आप निर्माण कर रहे हैं--target
: मशीन जो GCC के लिए बाइनरी का उत्पादन करेगीसे जीसीसी प्रलेखन ( मेजबान / लक्ष्य विशिष्ट स्थापना नोट्स ):
यदि निर्माण, मेजबान और लक्ष्य सभी समान हैं, तो इसे मूल निवासी कहा जाता है। यदि बिल्ड और होस्ट समान हैं, लेकिन लक्ष्य अलग है, तो इसे क्रॉस कहा जाता है। अगर बिल्ड, होस्ट और टारगेट सभी अलग-अलग हैं, तो इसे कनाडा कहा जाता है (अस्पष्ट कारणों से कनाडा की राजनीतिक पार्टी और उस समय बिल्ड पर काम करने वाले व्यक्ति की पृष्ठभूमि के साथ काम करना)। यदि होस्ट और लक्ष्य समान हैं, लेकिन बिल्ड अलग है, तो आप एक क्रॉस-कंपाइलर का उपयोग एक अलग सिस्टम के लिए एक देशी बनाने के लिए कर रहे हैं। कुछ लोग इसे होस्ट-एक्स-होस्ट कहते हैं, जो पार किया हुआ देशी या क्रॉस-निर्मित देशी है। यदि निर्माण और लक्ष्य समान हैं, लेकिन होस्ट अलग है, तो आप क्रॉस कंपाइलर बनाने के लिए एक क्रॉस कंपाइलर का उपयोग कर रहे हैं जो आपके द्वारा बनाई जा रही मशीन के लिए कोड का उत्पादन करता है। यह दुर्लभ है, इसलिए इसका वर्णन करने का कोई सामान्य तरीका नहीं है। इसे क्रॉसबैक कहने का प्रस्ताव है।
--target
किसी भी परियोजना के लिए प्रासंगिक नहीं है, जो स्वयं संकलक नहीं है। तो यह एक मानक कॉन्फ़िगर विकल्प क्यों है? भ्रामक।
configure
बिल्कुल अच्छे और साफ डिजाइन का शिखर नहीं है; मुझे लगता है कि यह केवल एप्लिकेशन-विशिष्ट सुविधा रेंगना का एक परिणाम है।
--host
और--build
। मुझे दो C ++ प्रोजेक्ट्स मिले हैं और एंड्रॉइड के लिए बनाना असंभव है क्योंकि ऑटोटॉल्स इतना f ** k'd है। यह मेजबान के टूलचिन का उपयोग करके परीक्षण चलाने पर जोर देता है।