"./Configure" বিকল্প "- বিল্ড", "- হোস্ট" এবং "- তারাট" এর পার্থক্য কী?


121

স্ক্রিপ্ট ./configure3 অপশন গ্রহণ --build, --hostএবং --target। আমি তাদের ভূমিকা গুলিয়ে ফেলছি। এগুলির পার্থক্য এবং শব্দার্থকতা কী?


অটোটুলগুলি ক্রস-সংকলনের জন্য এমনকি ভুল সরঞ্জামচেন ব্যবহার করবে --hostএবং এমনকি ব্যবহার করবে --build। আমি দুটি সি ++ প্রকল্প পেয়েছি এবং অ্যান্ড্রয়েডের জন্য এটি নির্মাণ করা অসম্ভব কারণ অটোটুলগুলি এত চ ** কেড আপ। এটি হোস্টের সরঞ্জামচেন ব্যবহার করে পরীক্ষা চালানোর উপর জোর দেয়।
jww

উত্তর:


109

হিসাবে উল্লেখ করা এই ব্লগ পোস্টের এবং উল্লিখিত জিসিসি কনফিগার শর্তাদি , --targetশুধুমাত্র প্রযোজ্য যখন আপনি toolchains সংকলন করা হয়। আপনি যখন কোনও লাইব্রেরি বা বাইনারি ব্যবহার করেন তার সাধারণ ক্রস সংকলন করছেন

--build=the architecture of the build machine
--host=the architecture that you want the file to run on

তবে, আপনি যখন সরঞ্জামচেইনগুলি তৈরি করছেন তখন জিনিসগুলি আরও জটিল হয়ে উঠতে পারে। আমি মনে করি যে নিম্নলিখিতটি সঠিক (যদিও আমি বলতে পারি না যে আমি নিজে কখনও ক্রস-ডিবাগারটি কম্পাইল করেছি):

বলুন যে আপনার কাছে রয়েছে:

  • একটি পাওয়ারপিসি বিল্ড মেশিন যা আপনি সমস্ত সংকলন করতে যাচ্ছেন
  • মাইপস প্রসেসর সহ বেশ কয়েকটি এম্বেড থাকা ডিভাইস, যা আপনার কোডটি চলতে চলেছে
  • আপনি একটি x86 ল্যাপটপ যা ক্ষেত্রের মধ্যে এই ডিভাইসগুলি ডিবাগ করার জন্য ব্যবহার করতে যাচ্ছেন

আপনি নিজের এম্বেড থাকা ডিভাইসটির সাথে চালানোর জন্য আপনার ডিবাগিং সার্ভারটি (যেমন: জিডিবার্সার) কনফিগার এবং তৈরি করতে পারেন

./configure --build=powerpc --host=mips

যাতে আপনি আপনার এম্বেড থাকা ডিভাইসে লাগাতে পারেন এবং ডিবাগিং শুরু করতে এবং 1234 পোর্টে শুনতে "gdbserver: 1234 a.out" চালাতে পারেন।

তারপরে আপনি আপনার ডিবাগিং ক্লায়েন্টটি (যা gdbserver এর সাথে সংযোগ স্থাপন করে এবং নিয়ন্ত্রণ করে) তৈরি করবে

./configure --build=powerpc --host=i686 --target=mips 

যা আপনি আপনার x86 ল্যাপটপে অনুলিপি করবেন যাতে ক্ষেত্রটিতে আপনি আপনার আউটআউট প্রোগ্রামটি ডিবাগ করার জন্য "gdbclient এমবেডেড.ডভাইস: 1234" চালাতে পারেন।

এটি সমস্ত সংকলকগুলির ক্ষেত্রেও প্রযোজ্য যার জন্য আপনি উপরের জিসিসির লিঙ্কটি বা কানাডার ক্রস সংকলন সম্পর্কে এই বিভাগটি দেখতে চাইতে পারেন ।

এছাড়াও লক্ষ করুন যে, বাস্তবে, আপনি সম্ভবত বিল্ড, হোস্ট বা লক্ষ্যমাত্রা নির্দিষ্ট না দেখতে পারেন কারণ এই অটোকনফ ম্যানুয়াল পৃষ্ঠা অনুসারে , "হোস্টের জন্য ডিফল্ট পূর্বনির্ধারিত, নির্মাণের জন্য হোস্ট, এবং কনফিগারেশন এর ফলাফলের ভিত্তিতে তৈরি করা" build

এককথায়, কোডটি চালু করুন --build, আর্কিটেকচার পরিবেশের --hostসাথে এটি চালান with--target


11
"হোস্ট" এবং "লক্ষ্য" জন্য কী রাখবেন তা কীভাবে সন্ধান করবেন?
কালো

4
আমার ধারণা আপনি একটি নতুন সংকলক তৈরির বিষয়ে কথা বলছেন, কারণ "--তারগেট" কেবল সংকলকগুলির জন্যই প্রাসঙ্গিক। * "হোস্ট" হল যেখানে আপনার নতুন সংকলকটি চালানো উচিত। * "টার্গেট" হল যেখানে আপনার নতুন সংকলক দ্বারা উত্পাদিত এক্সিকিউটেবলগুলি চালানো উচিত।
ব্যবহারকারী 1735594

এটি কি এটি একটি ভুল উত্তর হিসাবে তৈরি করে না, কারণ --host = i686 এখানে বৈধ নয়?
infoclogged

1
এই উত্তরটি উল্লেখ করে যে সংকলনগুলি এমআইপিএস টার্গেটের জন্য করা হয়েছিল এবং এটি হ'ল বিল্ড এবং হোস্টটি এমআইপিএস মেশিনের ডিবাগার the এর অর্থ কি ডিবাগার / সংকলকটি পাওয়ারপিসি দ্বারা নির্মিত হয়েছিল? এটি আমি অন্য ব্যবহারকারী (নেড) এর কাছ থেকে পেয়েছি: বিল্ড = আমি যেখানে সংকলকটি সংকলন করছি, হোস্ট = যেখানে সংকলকটি চলবে, লক্ষ্য = কী কোডটি সংকলক উত্পাদন করবে। রেফারেন্স: stackoverflow.com/questions/7088576/...
supmethods

নেডের মতে, এর অর্থ এই নয় যে পাওয়ারপিসি হ'ল বিল্ড / হোস্ট, এক্স 86 মেশিনটি ডিবাগারের একটি লক্ষ্য এবং এমআইপিএস সিস্টেম হিসাবে লক্ষ্য। "বিল্ডিং ফর" এবং "বিল্ডিং অন" কী কী আপনি আরও ব্যাখ্যা করতে পারেন? আমি gcc.gnu.org/onlinesocs/gccint/Configure-Terms.html তে উল্লেখ করছি
সুপারমেডস

75

দ্রষ্টব্য:--target কেবলমাত্র সংকলক (যেমন জিসিসি) তৈরি করার সময় আর্গুমেন্টটি অর্থবোধ করে। configureজিসিসি নির্মাণের আগে যখন চলমান :

  • --build: আপনি যে মেশিনটি তৈরি করছেন তা
  • --host: আপনি যে মেশিনটি তৈরি করছেন
  • --target: জিসিসি যে মেশিনটির জন্য বাইনারি তৈরি করবে

থেকে জিসিসি ডকুমেন্টেশন ( হোস্ট / উদ্দিষ্ট নির্দিষ্ট ইনস্টলেশন নোট ):

যদি বিল্ড, হোস্ট এবং লক্ষ্য সব একই হয় তবে এটিকে স্থানীয় বলা হয়। যদি বিল্ড এবং হোস্ট একই হয় তবে লক্ষ্য পৃথক হয় তবে এটিকে ক্রস বলা হয়। যদি বিল্ড, হোস্ট এবং টার্গেট সবই আলাদা হয় তবে এটিকে কানাডিয়ান বলা হয় (কানাডার রাজনৈতিক দল এবং তত্কালীন সেই বিল্ডে কাজ করা ব্যক্তির ব্যাকগ্রাউন্ডের সাথে অস্পষ্ট কারণে কাজ করা)। হোস্ট এবং লক্ষ্য যদি একই হয় তবে বিল্ড আলাদা, আপনি আলাদা সিস্টেমের জন্য নেটিভ তৈরি করতে ক্রস-সংকলক ব্যবহার করছেন। কিছু লোক এটিকে হোস্ট-এক্স-হোস্ট, ক্রসড নেটিভ বা ক্রস-বিল্ট নেটিভ বলে। যদি বিল্ড এবং লক্ষ্য একই হয় তবে হোস্টটি আলাদা, আপনি যে মেশিনটি তৈরি করছেন তার কোড তৈরি করে এমন ক্রস সংকলক তৈরি করতে আপনি ক্রস সংকলক ব্যবহার করছেন। এটি বিরল, তাই এটি বর্ণনা করার কোনও সাধারণ উপায় নেই। এটিকে ক্রসব্যাক বলার প্রস্তাব রয়েছে।


2
আপাতদৃষ্টিতে যার অর্থ --targetকোনও প্রকল্পের সাথে প্রাসঙ্গিক নয় যা নিজেই সংকলক নয়। সুতরাং এটি কেন একটি আদর্শ কনফিগার বিকল্প? বিভ্রান্তিকর।
ধরদি

1
@ ধরডি: configureঠিক ভাল এবং পরিষ্কার নকশার একটি চূড়া নয়; আমি অনুমান করি এটি কেবলমাত্র অ্যাপ্লিকেশন-নির্দিষ্ট বৈশিষ্ট্যের ক্রাইপের ফলাফল।
টিম Čas

যদি আমি একটি জিসিসি পেতে চাই, উদাহরণস্বরূপ চালান "। সাধারণত, জিসিসি একটি শক্তিশালী সরঞ্জাম যা সি কোড তৈরি করতে পারে, তারপরে অনেক প্ল্যাটফর্মের জন্য বিভিন্ন ধরণের ফলাফল আউটপুট দেয়। এখানে আমি যদি '--target = mips' ব্যবহার করি তবে নির্দিষ্ট জিসিসি কি ক্ষমতাটি হারাবে?
gfan

কনফিগার.গেস এবং কনফিগার.সুব ফাইলগুলি আপডেট করার জন্য যা কাজ করতে পারে তা হ'ল সংকলকটি আরও বেশি লক্ষ্য প্ল্যাটফর্ম জানে .. আপনি সেগুলি এখানে পেতে পারেন: gnu.org/software/gettext/manual/html_node/config_002eguess.html
wirtsi
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.