কোড সংকলনের মান কী অটোমেক এবং অটোকনফ?


22

আমি কখনও কখনও উত্স থেকে অ্যাপ্লিকেশন সংকলন এবং আমি হয় ব্যবহার করা হয়:

./configure
make
sudo make install

তবে সম্প্রতি, আমি এসেছি ./autogen.shযা আমার জন্য কনফিগার তৈরি করে এবং স্ক্রিপ্ট তৈরি করে এবং তা কার্যকর করে।

সি / সি ++ / সি # (মনো) সংকলন প্রবাহিত করার জন্য অন্যান্য কোন পদ্ধতি বিদ্যমান? কিছুটা পুরানো মনে হচ্ছে। সেখানে কি নতুন সরঞ্জাম আছে? পছন্দটি দেওয়া, আমার কোনটি ব্যবহার করা উচিত?


ঠিক 'কোড' এর মতো কিছুই নেই। উদাহরণস্বরূপ আপনি যদি জাভা কোড পান তবে আপনি সম্ভবত এটি মেন বা পিঁপড়ে ব্যবহার করে তৈরি করবেন, যদি পাইথন পান তবে একটি ভাল পছন্দ সেটআপলগুলি। কোনও কিছু সংকলনের মানক উপায় নেই। হতে পারে আপনার প্রশ্নটি সংস্কার করা উচিত।
ডেইগা

ভাল যুক্তি. আমি আসলে মনো # দিয়ে সি # তে কোডিং করছি তবে আমার প্রশ্নটি সি / সি ++ এর ক্ষেত্রেও প্রযোজ্য।
লুই সালিন

ছোট নোট: অটোজেন.শ আপনার জন্য মেক এক্সিকিউট করে না, কেবল কনফিগার করে।
স্যান্ডি

@Sandy autogen.shবেশিরভাগই কাস্টম স্ক্রিপ্ট হয়, যা সাধারণত ডাকা autoreconfকিন্তু এছাড়াও ডাকা পারে ./configureএবং এমনকি make। আমি মনে করি না যে এর আচরণটি কোনওভাবেই প্রমিত করা হয়েছে; মূল উদ্দেশ্যটি হল প্রকল্পের মধ্যে একটি এক্সেটেবল ফাইল থাকা, যা লোকেরা চালাতে পারে (তাদের জেনে রাখা দরকার তা জানার চেয়ে autoreconf)
ইউটিউব

উত্তর:


42

ইউনিটসের একটি বিবর্তনীয় সমস্যা সমাধানের জন্য অটোকনফ এবং অটোমাকে সেট করা হয়েছিল।

ইউনিক্স বিভিন্ন দিক থেকে বিবর্তিত হওয়ার সাথে সাথে, বিকাশকারীরা যেগুলি পোর্টেবল কোড চেয়েছিল তারা এই জাতীয় কোড লিখতে ঝোঁক:

#if RUNNING_ON_BSD
Set things up in the BSD way
#if RUNNING_ON_SYSTEMV
Set things up in the SystemV way
#endif

যেহেতু ইউনিক্সকে বিভিন্ন বাস্তবায়নের (BSD, SystemV, অনেক বিক্রেতার কাঁটাচামচ, এবং পরবর্তী সময়ে লিনাক্স এবং অন্যান্য ইউনিক্সের মতো সিস্টেম) স্থাপন করা হয়েছিল, এটি বিকাশকারীদের পক্ষে গুরুত্বপূর্ণ হয়ে ওঠে যেগুলি পোর্টেবল কোডটি কোড লিখতে চেয়েছিল যা অপারেটিং সিস্টেমের কোনও নির্দিষ্ট ব্র্যান্ডের উপর নির্ভর করে না write তবে অপারেটিং সিস্টেম দ্বারা প্রকাশিত বৈশিষ্ট্যগুলিতে। এটি গুরুত্বপূর্ণ কারণ একটি ইউনিক্স সংস্করণ একটি নতুন বৈশিষ্ট্য প্রবর্তন করবে, উদাহরণস্বরূপ "প্রেরণ" সিস্টেম কল, এবং পরে অন্যান্য অপারেটিং সিস্টেমগুলি এটি গ্রহণ করবে। ব্র্যান্ড এবং সংস্করণগুলির জন্য যাচাই করা কোডের একটি স্প্যাগেটি না রেখে, বিকাশকারীরা বৈশিষ্ট্য দ্বারা অনুসন্ধান শুরু করেছিলেন, তাই কোডটি হয়ে উঠেছে:

#if HAVE_SEND
Use Send here
#else
Use something else
#endif

একটি কনফিগার্ড ফাইল সম্পাদনা করতে 90 এর পয়েন্ট ডেভলপারদের মধ্যে সোর্স কোডটি সংকলন করার জন্য বেশিরভাগ ফাইলগুলি পুনরায় পড়ুন এবং সিস্টেমটিতে সঠিক বৈশিষ্ট্য উপস্থিত রয়েছে বা পরীক্ষিত প্রতিটি অপারেটিং সিস্টেমের কনফিগারেশনের জন্য স্ট্যান্ডার্ড কনফিগারেশন ফাইলগুলি পাঠান।

এই প্রক্রিয়াটি উভয়ই জটিল এবং ত্রুটির প্রবণ ছিল এবং এভাবেই অটোকনফ হয়ে উঠল। আপনার অটোকনফকে বিশেষ ম্যাক্রোগুলির সাহায্যে শেল কমান্ড দ্বারা গঠিত একটি ভাষা হিসাবে ভাবতে হবে যা ক্রিয়াকলটির জন্য অপারেটিং সিস্টেমটিকে তদন্তকারী একটি সরঞ্জাম দিয়ে কনফিগারার মানব সম্পাদনা প্রক্রিয়া প্রতিস্থাপন করতে সক্ষম হয়েছিল।

আপনি সাধারণত কনফিগার ফাইল ফাইলটিতে আপনার প্রোবিং কোডটি লিখতেন এবং তারপরে অটোকনফ কমান্ডটি চালান যা আপনি ব্যবহার করেছেন এমন এক্সিকিউটেবল কনফিগার কমান্ডের সাথে এই ফাইলটি সংকলন করবে।

সুতরাং আপনি যখন চালনা করেন ./configure && makeআপনি আপনার সিস্টেমে উপলব্ধ বৈশিষ্ট্যগুলির জন্য অনুসন্ধান করছেন এবং তারপরে সনাক্ত হওয়া কনফিগারেশনটি দিয়ে এক্সিকিউটেবল নির্মাণ করছেন।

যখন ওপেন সোর্স প্রকল্পগুলি সোর্স কোড নিয়ন্ত্রণ সিস্টেমগুলি ব্যবহার করা শুরু করেছিল, তখন এটি কনফিগার.এ্যাক ফাইলটিতে যাচাই করা বুদ্ধিমান হয়েছিল, তবে সংকলনের (কনফিগার) ফলাফল নয়। অটোজেন.শ কেবলমাত্র একটি ছোট স্ক্রিপ্ট যা আপনার জন্য সঠিক কমান্ড যুক্তি সহ অটোকনফ সংকলককে অনুরোধ করে।

-

অটোমেক সম্প্রদায়তে বিদ্যমান প্রচলিত পদ্ধতির বাইরেও বেড়েছে। জিএনইউ প্রকল্পটি মেকফাইলগুলির জন্য নিয়মিত লক্ষ্যমাত্রার একটি সেটকে মানায়িত করেছে:

  • make all প্রকল্প তৈরি করবে
  • make clean প্রকল্প থেকে সমস্ত সংকলিত ফাইল সরানো হবে
  • make install সফ্টওয়্যার ইনস্টল করা হবে
  • ভালো জিনিস make distএবং make distcheckবিতরণের জন্য উৎস প্রস্তুত এবং যাচাই করুন যে ফলাফলের সম্পূর্ণ সোর্স কোড প্যাকেজ ছিল হবে
  • এবং তাই ...

বিল্ডিং কমপ্লায়েন্ট মেকফিলগুলি বোঝা হয়ে ওঠে কারণ প্রচুর বয়লারপ্লেট ছিল যা বারবার পুনরাবৃত্তি হয়েছিল। সুতরাং অটোমেক হ'ল একটি নতুন সংকলক যা অটোকনফের সাথে সংহত হয়েছিল এবং "উত্স" মেকফিলের (মেকফিল.ম নামে পরিচিত) প্রক্রিয়াজাত করে মেকফাইলে যা পরে অটোকনকে খাওয়ানো যেতে পারে।

অটোমেক / অটোকনফ সরঞ্জামচইন আসলে বেশ কয়েকটি অন্যান্য সহায়ক সরঞ্জাম ব্যবহার করে এবং সেগুলি অন্যান্য নির্দিষ্ট কাজের জন্য অন্যান্য উপাদানগুলির দ্বারা বাড়ানো হয়। ক্রম হিসাবে এই কমান্ডগুলি চালনার জটিলতা বাড়ার সাথে সাথে একটি প্রস্তুত-চালিত স্ক্রিপ্টের প্রয়োজনীয়তার জন্ম হয় এবং এখান থেকেই অটোজেন.শ এসেছে from

যতদূর আমি জানি, জিনোম এমন প্রকল্প ছিল যা এই সহায়ক সহায়ক স্ক্রিপ্ট অটোজেন.শের ব্যবহারের প্রবর্তন করেছিল


কেবলমাত্র একটি গৌণ নিট: সর্বনিম্ন উপলব্ধ সরঞ্জামগুলির মধ্যে বিল্ড নির্ভরতা হ্রাস করার জন্য, জিএনইউ স্ট্যান্ডার্ডগুলি টার্বলগুলিতে উত্পন্ন ফাইলগুলি শিপিংয়ের নির্দেশ দেয়। যদি আপনি কাঁচা উত্স পান (উদাহরণস্বরূপ কোনও সংস্করণ নিয়ন্ত্রণ ব্যবস্থা থেকে), উত্পন্ন ফাইলগুলি সেখানে থাকবে না।
ভোনব্র্যান্ড

14

এই অঞ্চলে দুটি "বড় প্লেয়ার" রয়েছে; Cmake, এবং GNU অটোটুলস।

  • জিএনইউ অটটুলস হল জিনিসগুলি করার জন্য জিএনইউ উপায়, এবং মোটামুটি * নিক্সে ফোকাস করা হয়। এটি এক ধরণের মেটা-বিল্ড সিস্টেম, এমন একটি সরঞ্জাম সরবরাহ করে যা নির্দিষ্ট কনফিগার তৈরি করে এবং আপনি যা করার চেষ্টা করছেন তার জন্য ফাইল তৈরি করে। এটি আপনাকে আপনার বিল্ড সিস্টেমকে সরাসরি পরিচালনা না করে আপনার কোডে আরও পরিবর্তন আনতে সহায়তা করে এবং এটি আপনার কোডগুলিকে এমনভাবে তৈরি করতে সহায়তা করে যা আপনি * নিক্স এর আওতায় ডিজাইন করেননি in

  • Cmake জিনিস করার ক্রস প্ল্যাটফর্ম উপায়। জেমিসি, ভিজ্যুয়াল স্টুডিও, এক্সকোড, উইন্ডোজ, ওএসএক্স, সোলারিস, বিএসডি, জিএনইউ / লিনাক্স, যাই হোক না কেন, ক্ল্যামেক টিম অনেকগুলি বিভিন্ন উপায়ে সফ্টওয়্যার তৈরি করে। আপনি যদি আপনার কোড বেসের বহনযোগ্যতার সাথে কিছুটা উদ্বিগ্ন হন তবে এটি যাওয়ার উপায়।

যেমনটি উল্লেখ করা হয়েছে, কিছু লোক স্ক্যানসকে পছন্দ করে। আপনি পাইথনের সাথে পরিচিত হলে এটি আপনার কাজের পরিবেশে আরও ধারাবাহিকতা সরবরাহ করতে পারে।

রুবিতে রাক নামে একটি ধরণের মেটা-বিল্ড সিস্টেম রয়েছে যা এটি নিজের ডান দিক থেকে বেশ দুর্দান্ত এবং এটি রুবির সাথে ইতিমধ্যে পরিচিতদের পক্ষে খুব কার্যকরী।


6

স্ক্যানগুলি হ'ল একটি সম্ভাব্য প্রতিস্থাপন, যদিও আমার কোনও ব্যক্তিগত অভিজ্ঞতা নেই। এটি পাইথনেও প্রয়োগ করা হয়েছে, যা বিল্ড পরিবেশের উপর নির্ভর করে কোনও সমস্যা হতে পারে।


2
বহনযোগ্যতা সমস্যা নেই যেহেতু পাইথন এখন কার্যত সর্বত্র। এখনও পর্যন্ত স্ক্যানস সম্পর্কে মূল অভিযোগ হ'ল এটি অগ্রহণযোগ্যভাবে ধীর। গতির পক্ষে যথাযথভাবে বিল্ডিংয়ের জন্য কিছু টুইট রয়েছে, তবে এটি এখনও মেকের সাথে সমান নয় কিনা তা আমি নিশ্চিত নই।
অ্যালেক্স বি

3

আপনি যদি সি # / মনো ব্যবহার করে থাকেন তবে আপনার সম্পূর্ণ বিল্ডিং প্রক্রিয়াটি পরিচালনা করতে আপনি এমএসবিল্ড (মনো ডেভেলফ এবং ভিজ্যুয়াল স্টুডিও দ্বারা ব্যবহৃত .sln / .csproj ফাইল) ব্যবহার করতে পারেন।

এরপরে আপনি মনোডিভলফ থেকে বিল্ড তৈরি করতে পারেন, বা xbuildআপনার প্রিয় টার্মিনালটিতে কমান্ডটি চালাতে পারেন (মনোতে ভালভাবে কাজ করে> = 2.6)। এটি অত্যন্ত সহজ এবং আপনার পক্ষে কোনও কাজ করার দরকার নেই, কারণ মনোডেভলফ আপনার জন্য এমএসবিল্ড ফাইলগুলি পরিচালনা করবে এবং আপনি এগুলি সম্পাদনা করার প্রয়োজন নেই যদি না আপনি মনোডাভেলফের ইউআই আপনার জন্য যা করতে পারেন তার বাইরে জিনিসগুলি টুইট করতে না চান।

এমএসবিল্ডের উপর নির্ভরশীল লোকেরা কীভাবে তাদের প্রকল্পগুলির জন্য ইনস্টলগুলি পরিচালনা করে আমি তার সাথে পরিচিত নই তবে আপনি সর্বদা এটি চাইতে পারেন। ;-)


হ্যাঁ, আমি এক্সবিল্ড সম্পর্কে জানি, তবে আমি নিজেকে আইডিই থেকে ছাড়ানোর চেষ্টা করছি যা কেবল আমার হাত ধরে রাখতে চায়। আরও, মনো মনো ব্যবহার করে সংকলিত এবং অটোকনফ ব্যবহার করে, তাই আমি আরও কিছুটা জানতে চেয়েছিলাম। ধন্যবাদ!
লুই সালিন

1
মজার বিষয় হল, প্রচুর মনো প্রকল্পগুলি এখন এমসবিল্ডে স্থানান্তরিত করার চেষ্টা করছে যে এক্সবিল্ড এত ভালভাবে কাজ করছে। এটি উইন্ডোজ / ম্যাক সমর্থনকে কিছুটা সহজ করে তোলে। মনোোর এত বেশি সি কোড রয়েছে যে আমি নিশ্চিত না যে তাদের পক্ষে এক্সবিল্ডে স্থানান্তরিত হওয়া কতটা ব্যবহারিক হবে। তবে অটোকনফ দুর্দান্ত কাজ করে, তাই আপনার পক্ষে যা কাজ করে তা করুন। :-)
স্যান্ডি

0

সি # এর জন্য আপনি এক্সবিল্ড (এবং উইন্ডোজগুলিতে মিসবিল্ড) ব্যবহার করতে পারেন, যা আপনার প্রকল্প ফাইলগুলি থেকে প্রকল্পটি তৈরি করবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.