metaconfig - ক্লাউডে অনলাইন

এটি মেটাকনফিগ কমান্ড যা আমাদের একাধিক বিনামূল্যের অনলাইন ওয়ার্কস্টেশন যেমন উবুন্টু অনলাইন, ফেডোরা অনলাইন, উইন্ডোজ অনলাইন এমুলেটর বা MAC OS অনলাইন এমুলেটর ব্যবহার করে OnWorks ফ্রি হোস্টিং প্রদানকারীতে চালানো যেতে পারে।

কার্যক্রম:

NAME এর


metaconfig - একটি কনফিগার স্ক্রিপ্ট জেনারেটর

সাইনোপিসিস


metaconfig [-dhkmostvwGMV ] [ -L Dir ]

বর্ণনাঃ


Metaconfig একটি প্রোগ্রাম যা কনফিগার স্ক্রিপ্ট তৈরি করে। আপনি যদি না জানেন কি একটি
স্ক্রিপ্ট কনফিগার করুন, দয়া করে এড়িয়ে যান টিউটোরিয়াল এই ম্যানুয়াল পৃষ্ঠার বিভাগ। তুমি যদি চাও
ব্যবহারের উপায়ের একটি সম্পূর্ণ (আনুষ্ঠানিক) বর্ণনা metaconfig এবং এর ইউনিট, অনুগ্রহ করে দেখুন
REFERENCE, অধ্যায়. নিম্নলিখিত জ্ঞানীদের জন্য একটি দ্রুত ভূমিকা এবং রেফারেন্স
ব্যবহারকারী রয়েছেন.

Metaconfig সেট থেকে কাজ করে ইউনিট যা মেটাকনফিগ সম্পর্কে জানে এমন সবকিছুকে সংজ্ঞায়িত করে
বহনযোগ্যতা প্রতিটি ইউনিট স্বয়ংসম্পূর্ণ, এবং কোথাও নিবন্ধিত হতে হবে না
পাবলিক U ডিরেক্টরি বা আপনার ব্যক্তিগত U ডিরেক্টরিতে অন্তর্ভুক্তি ছাড়া। যদি
ডিস্ট প্যাকেজ (যার একটি অংশ metaconfig) LIB-তে ইনস্টল করা হয়, তারপর পাবলিক U
ডিরেক্টরি হল LIB/dist/mcon/U. এই মেশিনে, LIB ডিরেক্টরি হল /usr/share/dist। তোমার
ব্যক্তিগত U ডিরেক্টরি, আপনার যদি একটি থাকে, আপনার প্যাকেজের শীর্ষ স্তরের ডিরেক্টরিতে রয়েছে।
দৌড়ানোর আগে metaconfig আপনাকে কয়েকটি জিনিস করতে হবে:

প্যাকেজের টপ লেভেল ডিরেক্টরীতে একটি প্যাকেজ ফাইল তৈরি করুন packinit.
এই প্রোগ্রামটি আপনাকে আপনার প্যাকেজ সম্পর্কে জিজ্ঞাসা করবে এবং আপনি এটিকে কী বলবেন তা মনে রাখবেন
সমস্ত জেলা প্রোগ্রাম স্মার্ট হতে পারে.

· শব্দকোষের সাথে পরামর্শ করুন (LIB/dist/mcon-এ) এবং আপনার শেল স্ক্রিপ্ট এবং C প্রোগ্রাম লিখুন
চিহ্নগুলির পরিপ্রেক্ষিতে মেটাকনফিগ কীভাবে সংজ্ঞায়িত করতে হয় তা জানে। তোমাকে বলার দরকার নেই
metaconfig আপনি কোন চিহ্ন ব্যবহার করেছেন, যেহেতু metaconfig আপনার জন্য এটি বের করবে।

মেকফাইলস বা শেল স্ক্রিপ্ট লেখার জন্য যেকোন .SH স্ক্রিপ্ট তৈরি করুন যা নির্ভর করবে
কনফিগার দ্বারা সংজ্ঞায়িত মান. নামে একটি প্রোগ্রাম আছে makeSH যে আপনাকে সাহায্য করবে
একটি প্লেইন স্ক্রিপ্টকে স্ক্রিপ্টে রূপান্তর করুন।এসএইচ টেমপ্লেট; কিছু সম্পাদনা এখনও প্রয়োজন হবে
পরিবর্তিত কনফিগারেশন অংশ সরাতে ফলাফল .SH ফাইলে সঞ্চালিত
স্ক্রিপ্টের উপরের অংশ (এর দ্বারা তৈরি করা ইনলাইন মন্তব্যগুলি দেখুন makeSH আপনার .SH এর মধ্যে
ফাইল)।

আপনার শীর্ষ স্তরের ডিরেক্টরিতে একটি MANIFEST.new ফাইল তৈরি করুন যাতে সমস্ত ফাইলের তালিকা থাকে৷
আপনার প্যাকেজ। এই ফাইলটি ব্যক্তিগত থাকবে এবং ফাইনালের অংশ হবে না
বিতরণ (একটি সুবিধা হিসাবে, ম্যানিফেস্ট ফাইলটি ব্যবহার করা হবে metaconfig if
এখনো কোনো MANIFEST.new ফাইল নেই।) ফাইলের নাম প্রতিটিতে প্রথম ক্ষেত্র হওয়া উচিত
লাইন কিছু হোয়াইটস্পেস পরে আপনি আপনার ফাইল বর্ণনা একটি ছোট মন্তব্য যোগ করতে পারেন. কেবল
উৎস ফাইল সেখানে তালিকাভুক্ত করা উচিত. বিশেষ ফাইল patchlevel.h (যা হলো
প্যাচিং টুল দ্বারা পরিচালিত এবং রক্ষণাবেক্ষণ -- দেখুন চাপড়ান(1)) এর অংশ হওয়া উচিত
MANIFEST.new ফাইল, কিন্তু কিছু সরঞ্জাম দ্বারা নীরবে উপেক্ষা করা হতে পারে৷ একটি চলতি নিয়ম হিসাবে,
শুধুমাত্র RCS দ্বারা রক্ষণাবেক্ষণ করা ফাইলগুলি সেখানে তালিকাভুক্ত করা উচিত, patchlevel.h ফাইল হচ্ছে
একটি গুরুত্বপূর্ণ ব্যতিক্রম।

ঐচ্ছিকভাবে, আপনি একটি ম্যানিফেস্ট ফাইল তৈরি করতে চাইতে পারেন, যেটি একটি রপ্তানি সংস্করণ হবে৷
আপনার MANIFEST.new এর। সেই ফাইলটিকে অবশ্যই রিলিজের অংশ করতে হবে, অর্থাৎ উভয়েই তালিকাভুক্ত করতে হবে
আপনার MANIFEST.new এবং নিজেই ম্যানিফেস্ট৷ অন্যতম metaconfig ইউনিট এই সম্পর্কে জানে
ফাইল এবং কনফিগারকে সমস্ত ফাইল নিশ্চিত করে রিলিজ চেক করতে বাধ্য করবে
বিতরণের অংশ আছে তালিকাভুক্ত. MANIFEST এবং MANIFEST.new ফাইলগুলি থাকা উচিত৷
আলাদা হতে হবে, লিঙ্ক নয়।

আপনি আপনার ব্যক্তিগত U ডিরেক্টরিতে পরিবর্তন করতে চান এমন যেকোনো .U ফাইল কপি করুন। যেকোনো .U ফাইল
আপনার ব্যক্তিগত U ডিরেক্টরিতে সর্বজনীন U-এর থেকে পছন্দের জন্য ব্যবহার করা হবে
ডিরেক্টরি উদাহরণস্বরূপ, যেকোন ইউনিটকে জোরপূর্বক অন্তর্ভুক্ত করার একটি উপায় হল End.U-এর অনুলিপি করা
আপনার .U ডিরেক্টরিতে ফাইল করুন এবং আপনি যে ইউনিটের উপর নির্ভরতা চান তার নাম যোগ করুন
শেষ? MAKE: লাইন. কিছু ইউনিট শুধুমাত্র এই ভাবে বাধ্য করা যেতে পারে, যথা
সেগুলিকে সতর্ক করে দেওয়া হয়। আপনি নির্দিষ্ট ডিফল্ট কাস্টমাইজ করতে পারেন
আপনার প্যাকেজের ব্যক্তিগত U ডিরেক্টরিতে Myinit.U অনুলিপি করে ভেরিয়েবল কনফিগার করুন এবং
সেই ইউনিটে ভেরিয়েবল সেট করা।

এখন আপনি চালানোর জন্য প্রস্তুত metaconfig. যে একটি তৈরি করবে কনফিগার করুন ফাইল, এবং ঐচ্ছিকভাবে a
config_h.SH ফাইল (যদি আপনার উত্স C চিহ্ন ব্যবহার করে)। উত্পন্ন ফাইল হবে
প্রয়োজনে স্বয়ংক্রিয়ভাবে আপনার MANIFEST.new এ যোগ করা হবে। আপনার আপডেট করতে ভুলবেন না
যদিও ম্যানিফেস্ট ফাইল।

নতুন ইউনিট তৈরি করতে, নিম্নলিখিতগুলি করুন:

একটি নতুন .U ফাইলে অনুরূপ ইউনিট কপি করুন। আপনি যে নামটি চয়ন করেন সেটি একটি নাম হওয়া উচিত
ইউনিট দ্বারা উত্পন্ন পরিবর্তনশীল, যদিও এটি শুধুমাত্র আপনার জন্য একটি সুবিধা, একটি নয়
প্রয়োজন ফাইলের নাম কাটা রোধ করতে এটি 12 বা তার কম অক্ষর হওয়া উচিত।
প্রকৃতপক্ষে, এটি সম্ভবত 10 বা তার কম হওয়া উচিত যাতে যারা RCS ব্যবহার করতে চান তাদের থাকতে পারে
একটি .U,v কাটা ছাড়াই শেষে। Metaconfig প্রথম অক্ষরের ক্ষেত্রে ব্যবহার করে
কোন ভেরিয়েবল আসলে এই ইউনিট দ্বারা উত্পাদিত হয় কিনা তা নির্ধারণ করুন, তাই আপনার ক্যাপিটালাইজ করবেন না
ইউনিটের নাম যদি এটি একটি শেল ভেরিয়েবল তৈরি করে।

আপনি যা চান তা করতে নতুন .U ফাইলটি সম্পাদনা করুন। প্রথম ?MAKE: লাইনটি নির্দেশ করে
নির্ভরতা; চূড়ান্ত তালিকা কোলন আগে এই ইউনিট সংজ্ঞায়িত সমস্ত ভেরিয়েবল, এবং
চূড়ান্ত কোলনের পরে সমস্ত ভেরিয়েবল (বা অন্যান্য ইউনিট) যার উপর এই ইউনিট নির্ভর করে।
এই তালিকাগুলো সঠিক হওয়া খুবই গুরুত্বপূর্ণ। যদি একটি নির্ভরতা ঐচ্ছিক হয় এবং ক
ডিফল্ট মান ব্যবহার করা যেতে পারে, আপনার '+' চিহ্ন দিয়ে নির্ভরতা উপসর্গ করা উচিত। দ্য
প্রতীক গণনা করার জন্য সংশ্লিষ্ট ইউনিট লোড করা হবে না, যদি না সত্যিই প্রয়োজন হয়
অন্য ইউনিট দ্বারা।

· যতটা সম্ভব, শেল ভেরিয়েবলের উপর ভিত্তি করে আপনার ইউনিটকে প্যারামিটারাইজ করুন
?INIT: লাইন। এটি পরিবর্তনশীল সংজ্ঞাগুলিকে Init.U ইউনিট পর্যন্ত নিয়ে যাবে, যেখানে
সেগুলি Myinit.U-তে সংজ্ঞা দ্বারা ওভাররাইড করা যেতে পারে, যা Init.U-এর পরে অন্তর্ভুক্ত করা হয়েছে।

· কোন C চিহ্নের সংজ্ঞা যোগ করুন? H: লাইন হিসেবে। একটি লাইন দিয়ে শুরু
?H:?%<: .U ফাইলে শেষ config.h ফাইলে যোগ করা হবে যদি এবং শুধুমাত্র যদি
metaconfig সিদ্ধান্ত নেয় যে এই ইউনিটটি প্রয়োজন। %< ইউনিটের নাম বোঝায়,
যা ফাইলের নামও হতে পারে (.U ছাড়া) যদি আপনি অনুসরণ করেন
সম্মেলন ভেরিয়েবলের একটির ক্ষেত্রে সর্বদা প্রতিটি ?H: লাইনে একটি মন্তব্য করুন
লাইনের আগের প্রতিস্থাপন এটি শেষ না করে একটি মন্তব্য শুরু করে। যেকোন শেল
d_ দিয়ে শুরু হওয়া পরিবর্তনশীল এটি করতে পারে, তাই সাবধান। আপনি যদি ?%<: বাদ দেন, তাহলে
মেটাকনফিগ সেই চিহ্নটিকে অন্তর্নিহিত করার চেষ্টা করবে যার সংজ্ঞার আগে প্রয়োজন
config.h-এ অন্তর্ভুক্তি

· শব্দকোষের সংজ্ঞা যোগ করুন? S: শেল ভেরিয়েবলের জন্য লাইন এবং C: C-এর জন্য লাইন
প্রিপ্রসেসর ভেরিয়েবল। উদাহরণের জন্য একটি বর্তমান ইউনিট দেখুন। এটা খুবই গুরুত্বপূর্ণ
প্রতিটি এন্ট্রি একটি বাম ন্যায্য প্রতীক নাম দিয়ে শুরু করুন এবং প্রতিটি এন্ট্রি একটি ?C: দিয়ে শেষ করুন। বা
?এস:। লাইন অ্যালগরিদম যা সি প্রিপ্রসেসর প্রতীক এন্ট্রির জন্য অনুবাদ করে
config.h এর জন্য মন্তব্যের শব্দকোষ এর উপর নির্ভর করে।

· আপনার সব অর্ডার নিশ্চিত করুন? লাইন ঠিক আছে। সঠিক ক্রম হল:

?RCS: এবং ?X: মূলত শুধু মন্তব্য
তৈরি করুন: metaconfig নির্ভরতা
Y: ইউনিট লেআউট নির্দেশিকা
?এস: শব্দকোষ শেল সংজ্ঞা
C: শব্দকোষ C সংজ্ঞা
?H: config.h সংজ্ঞা
?M: confmagic.h সংজ্ঞা
?W: ওয়ান্টেড চিহ্ন
?V: দৃশ্যমান চিহ্ন
?F: এই ইউনিট দ্বারা তৈরি ফাইল
T: অস্থায়ী শেল চিহ্ন ব্যবহার করা হয়
?D: ঐচ্ছিক নির্ভরতা ডিফল্ট মান
?O: অপ্রচলিত একক চিহ্নিত করতে ব্যবহৃত হয়
লিন্ট: ধাতব ইঙ্গিত
?INIT: শেল প্রতীক সূচনা

লাইনের ক্রম এবং অনুমোদিত বিভিন্ন বিন্যাস দেখানোর জন্য এখানে একটি উদাহরণ রয়েছে:

?RCS: $RCS-Id$
?RCS: কপিরাইট তথ্য
?RCS: $RCS-Log$
?এক্স:
?এক্স: একটি কল্পিত উদাহরণ
?এক্স:
?বানান:d_one দুই: তিন + চার পাঁচ
?বানান: -$@ % যোগ করুন
?Y:ডিফল্ট
?S:d_one:
?S: প্রথম শেল প্রতীক, শর্তসাপেক্ষে ONE সংজ্ঞায়িত করে।
?এস:।
?স:দুই:
?S: দ্বিতীয় শেল প্রতীক, TWO এর মান।
?এস:।
?C:ONE:
?C: প্রথম C চিহ্ন।
?গ:।
?C:TWO:
?C: দ্বিতীয় C চিহ্ন।
?গ:।
?H:#$d_one ONE /**/
?H:#দুটি "$two" সংজ্ঞায়িত করুন
?H:#$d_one ONE_TWO "$two"
?এইচ:।
?M:flip: HAS_FLIP
?M:#ifndef has_FLIP
?M:#flip(x) ফ্লপ(x) সংজ্ঞায়িত করুন
?M:#endif
?এম:.
?W:%<:one_two
?V:p_one p_two:p_XNUMX
?F:file ./ftest !tmp
?T:tmp var
?D: two='undef'
লিন্ট: তিনটি পরিবর্তন করুন
?INIT: two_init='2'
: ইউনিট বাস্তবায়ন শেল কোড অনুসরণ করে
p_one = 'এক'
p_two = 'দুই'
p_three=""

আমাকে এটি আরও একবার বলতে দিন: উপরের একক সংজ্ঞা হল a নকল একটি শুধুমাত্র দেখানোর জন্য
বিভিন্ন সম্ভাবনা। এই জাতীয় ইউনিট যাইহোক সামান্য উদ্দেশ্য পরিবেশন করবে... আরও কিছু
উন্নত বৈশিষ্ট্য এখানে বর্ণনা করা হয় না. অনুগ্রহ করে দেখুন REFERENCE, আরো জন্য বিভাগ
সম্পূর্ণ তথ্য।

· উপযুক্ত হিসাবে ইউনিটটিকে সর্বজনীন বা ব্যক্তিগত U ডিরেক্টরিতে রাখুন।

· পুনরায় চালান metaconfig.

· আপনার ইউনিট পাঠান ram@acri.fr (রাফেল মানফ্রেডি) মাস্টার কপিতে অন্তর্ভুক্তির জন্য,
আপনি যদি মনে করেন এটি সাধারণ আগ্রহের।

অবস্থান করার জন্য একটি নতুন প্রোগ্রাম যোগ করার জন্য:

Loc.U সম্পাদনা করুন, এবং উভয় প্রোগ্রামের নাম যোগ করুন? MAKE: লাইনে (এর মধ্যে
দুটি কোলন) এবং হয় লোকলিস্ট বা ট্রাইলিস্টে (প্রোগ্রামটি কিনা তার উপর নির্ভর করে
বাধ্যতামূলক বা না)।

· মেটাকনফিগ পুনরায় চালান।

· আপনার ইউনিটটি মাস্টার কপিতে অন্তর্ভুক্ত করার জন্য আমার কাছে পাঠান, যদি আপনি মনে করেন এটি সাধারণ
স্বার্থ.

.U ফাইল লেখার জন্য নোট:

* সর্বদা "rm -f" ব্যবহার করুন কারণ এমন সিস্টেম রয়েছে যেখানে rm ডিফল্টরূপে ইন্টারেক্টিভ থাকে।

* "সেট -- ..." ব্যবহার করবেন না কারণ '--' প্রতিটি শেলের সাথে কাজ করে না। ব্যবহার করুন "সেট x ...;
শিফট"

* "আনসেট ENV" ব্যবহার করবেন না যেহেতু আনসেট সম্পূর্ণরূপে বহনযোগ্য নয়। পরিবর্তে "ENV=''" বলুন।

* ইউনিস সিস্টেমের কারণে সর্বদা ইকো " " (একটি স্থান সহ) ব্যবহার করুন।

* শুধুমাত্র ব্যবহার করুন পরীক্ষা -r, -w, -f বা -d এর সাথে যেহেতু সেগুলিই একমাত্র বহনযোগ্য সুইচ। ভিতরে
বিশেষ করে, "টেস্ট -এক্স" এড়িয়ে চলুন।

* শুধুমাত্র V7 এর সাথে আসা প্রোগ্রামগুলি ব্যবহার করুন, যাতে আপনি জানেন যে প্রত্যেকের কাছে সেগুলি রয়েছে।

* আপনি যখন শর্তসাপেক্ষে গ্রেপ করতে চান তখন $contains ব্যবহার করুন, যেহেতু সব গ্রেপ একটি ফেরত দেয় না
যুক্তিসঙ্গত অবস্থা। '>/dev/null ব্যবহার করে আউটপুটটিকে /dev/null-এ পুনর্নির্দেশ করতে ভুলবেন না
2>&1'।

* "if [...]" এর পরিবর্তে "if test" ব্যবহার করুন কারণ প্রত্যেক sh পরবর্তী নির্মাণটি জানে না।

* ইনপুটগুলির জন্য myread স্ক্রিপ্ট ব্যবহার করুন যাতে তারা শেল এস্কেপ এবং ডিফল্ট করতে পারে
মূল্যায়ন সাধারণ রূপ হল

ক্ষেত্রে "$grimble" ইন
'') dflt=452;;
*) dflt="$grimble";;
যে সি
rp='আপনার কাছে কয়টি কুটকুট আছে?'
. ./myread
grimble="$ans"

* ঐচ্ছিক করার জন্য একটি ফাইল পাথনাম জিজ্ঞাসা করার সময় getfile স্ক্রিপ্ট ব্যবহার করুন৷
~ নাম সম্প্রসারণ এবং বিচক্ষণতা পরীক্ষা। সম্পূর্ণ বর্ণনার জন্য Getfile.U ইউনিট দেখুন।

* সর্বদা একটি রাখুন

$startsh

প্রতিটি জেনারেটেড স্ক্রিপ্টের শীর্ষে যেটি লঞ্চ হতে চলেছে বা সোর্স করা হচ্ছে৷
কনফিগার করুন.

* কখনই সাধারণ UNIX-isms অনুমান করবেন না যে একটি বস্তুর ফাইল a দিয়ে শেষ হয় .o এবং
যে একটি লাইব্রেরির নাম দিয়ে শেষ হয় .a। ব্যবহার $_o এবং $_a পরিবর্তে ভেরিয়েবল (দেখুন
Unix.U)।

* একটি কম্পাইল-লিংক-এক্সিকিউট পরীক্ষা করার সময়, সর্বদা এটির মতো লিখুন:

$cc $ccflags $ldflags try.c -o $libs চেষ্টা করুন

কারণ কিছু সিস্টেমে কম্পাইল করার আগে লিঙ্কিং পতাকা নির্দিষ্ট করা প্রয়োজন
টার্গেট (লিঙ্কিং লাইব্রেরিগুলি বাদ দিয়ে)।

* আউটপুট পুনঃনির্দেশ করতে '>&4' ব্যবহার করে ফাইল বর্ণনাকারী #4 এ গুরুত্বপূর্ণ বার্তা ইস্যু করুন।
শুধুমাত্র সেই বার্তাগুলি প্রদর্শিত হবে যখন -s সুইচ দেওয়া হয় কনফিগার করুন উপরে
কমান্ড লাইন (নীরব মোড)।

* সর্বদা একটি বৈশিষ্ট্য সবচেয়ে নির্দিষ্ট উপায়ে উপস্থিত কিনা তা নির্ধারণ করার চেষ্টা করুন -- করবেন না৷
আপনি যখন libc grep করতে পারেন তখন বলুন "if bsd"। সেখানে অনেক হাইব্রিড সিস্টেম আছে, এবং
প্রতিটি বৈশিষ্ট্য নিজেই দাঁড়ানো বা পড়ে যাওয়া উচিত।

* সর্বদা একটি বৈশিষ্ট্য সবচেয়ে সাধারণ উপায়ে উপস্থিত কিনা তা নির্ধারণ করার চেষ্টা করুন, যাতে
অন্যান্য প্যাকেজ আপনার ইউনিট ব্যবহার করতে পারেন.

* সন্দেহ হলে, একটি ডিফল্ট সেট করুন এবং জিজ্ঞাসা করুন। কিছু অনুমান করবেন না.

* যদি আপনি মনে করেন যে ব্যবহারকারী ভুল, তবে সে সঠিক হতে পারে তার জন্য অনুমতি দিন। জন্য
উদাহরণস্বরূপ, তিনি ব্যবহার করতে যাচ্ছেন তার চেয়ে ভিন্ন সিস্টেমে কনফিগার চালাতে পারেন
উপর চূড়ান্ত পণ্য.

মেটাকনফিগ আপনার ডিরেক্টরিতে নিম্নলিখিত নামগুলি সংরক্ষণ করে এবং যদি আপনি এই ধরনের নাম ব্যবহার করেন
ক্লোবার হতে পারে বা অন্যান্য অপ্রত্যাশিত প্রভাব থাকতে পারে:

.MT/*
কনফিগার করুন
ওয়ান্টেড
অপ্রচলিত
কনফিগার
config_h.SH
confmagic.h
U/*
MANIFEST.new

অতিরিক্তভাবে, কনফিগার এই নামগুলিকে যে ডিরেক্টরিতে চালিত করা হয় তাতে ক্লোবার করতে পারে:

UU/*
config.sh
config.h

বিকল্প


নিম্নলিখিত বিকল্প দ্বারা স্বীকৃত হয় metaconfig:

-d ডিবাগ মোড চালু করুন। আপনি ডিবাগিং না হলে সত্যিই দরকারী নয় metaconfig
নিজেই।

-h সাহায্য বার্তা প্রিন্ট করুন এবং প্রস্থান করুন।

-k অস্থায়ী ডিরেক্টরি রাখুন, যাতে আপনি ব্যবহৃত ফাইলগুলি পরীক্ষা করতে পারেন
metaconfig আপনার নির্মাণ করতে কনফিগার করুন লিপি. ডিবাগ করার সময় শুধুমাত্র দরকারী
ইউনিট।

-m অনেক মেমরি এবং স্থান অদলবদল অনুমান. এটি প্রতীক সন্ধানের গতি বাড়িয়ে তুলবে
একটি উল্লেখযোগ্য পরিমাণ সময় দ্বারা উৎস ফাইল, মেমরির খরচে
খরচ...

-o নতুনের উপর অপ্রচলিত চিহ্নগুলি ম্যাপ করুন। আপনার যদি এখনও কিছু থাকে তবে এই সুইচটি ব্যবহার করুন
আপনার সোর্স কোডে অপ্রচলিত প্রতীক এবং অপসারণ করতে চান না (বা করতে পারবেন না)
তাদের আপাতত। অপ্রচলিত প্রতীকগুলি অন্যথায় উপেক্ষা করা হয়, যদিও তা
থেকে আপনাকে একটি সতর্কবার্তা দেবে metaconfig.

-s নীরব মোড চালু করুন।

-t তারা পাওয়া যায় হিসাবে ট্রেস প্রতীক.

-v ভার্বোস মোড চালু করুন।

-w ধরে নিন ওয়ান্টেড ফাইলটি আপ-টু-ডেট। এটি সময় এবং স্মৃতি এড়িয়ে যাবে
সোর্স কোড স্ক্যান করার পর্যায়, পরিচিত চিহ্নের সন্ধান করা। এটা ব্যবহার করো
শুধুমাত্র যখন আপনি জানেন যে আপনার সোর্স ফাইলের ক্ষেত্রে কোন পরিবর্তন হয়নি
পুল এর metaconfig ব্যবহৃত প্রতীক।

-G এছাড়াও একটি GNU প্রদান করুন কনফিগার- উত্পন্ন সামনে শেষ মত কনফিগার করুন
স্ক্রিপ্ট, পাশাপাশি বন্টন অন্তর্ভুক্ত করা হবে. এটি কেবল একটি মোড়ক
চারপাশটিতে কনফিগার করুন স্বাভাবিকভাবেই স্ক্রিপ্ট, কিন্তু এটি লোকেদের সাথে পরিচিত হতে দেয়
একটি নতুন বিতরণের মুখোমুখি হওয়ার সময় GNU টুলটি হারিয়ে যাবে না।

-L Dir ডিফল্ট লাইব্রেরি অবস্থান ওভাররাইড করুন। সাধারণত শুধুমাত্র metaconfig জন্য দরকারী
রক্ষণাবেক্ষণকারীরা স্থানীয়ভাবে ইউনিটগুলি ব্যবহার করার পরিবর্তে বিকাশ করা হচ্ছে
সর্বজনীনভাবে উপলব্ধ। দ্য Dir নির্দিষ্ট ইউনিট ধারণকারী এক
U ডিরেক্টরি.

-M একটি উৎপাদনের অনুমতি দিন confmagic.h স্বয়ংক্রিয়ভাবে কিছু ভালভাবে রিম্যাপ করার জন্য ফাইল-
অন্য কিছু বিকল্প পরিচিত প্রতীক, যেমন বিসিপি() রিম্যাপ করা হচ্ছে
স্বচ্ছভাবে memcpy() যখন পাওয়া যায় না। এই বিকল্পটি চালু আছে
স্বয়ংক্রিয়ভাবে যখন a confmagic.h ফাইলটি শীর্ষ-স্তরের ডিরেক্টরিতে বিদ্যমান।
আপনি যদি এই বিকল্পটি স্থায়ীভাবে নিষ্ক্রিয় করতে চান তবে কেবল সেই ফাইলটি সরান৷

-V সংস্করণ নম্বর প্রিন্ট করুন এবং প্রস্থান করুন।

টিউটোরিয়াল


এই (দীর্ঘ) অধ্যায় একটি ভূমিকা metaconfig, যা আমরা সব শিখব
মৌলিক আপনি যদি ইতিমধ্যে ব্যবহার করতে জানেন metaconfig, আপনি নিরাপদে পরবর্তী এড়িয়ে যেতে পারেন
অধ্যায়.

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

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

এখন আসুন আমরা নিজেদের গালাগালি না করি। সেই তথ্য ব্যবহার করার জন্য বৃহত্তর দক্ষতার প্রয়োজন, তবুও এটি করতে পারে
আরও পোর্টেবল প্রোগ্রামের দিকে নিয়ে যায় যেহেতু এটি একটি সিস্টেম-স্বাধীন ফ্যাশনে লেখা হয়
এবং শুধুমাত্র এই সত্যের উপর নির্ভর করে যে কিছু অনুমান একটি নির্দিষ্ট সিস্টেমে সত্য বা মিথ্যা,
প্রতিটি অনুমান একে অপরের সাথে সম্পর্কহীন। অর্থাৎ, আমরা বলি না: আমরা ক
বিএসডি সিস্টেম বা আমরা একটি ইউএসজি সিস্টেমে আছি। এটা আজকাল যাইহোক খুব অস্পষ্ট. না, আমরা চাই
সোর্স কোডকে বলুন: এই সিস্টেমে নেই নাম পরিবর্তন করুন() সিস্টেম কল এবং malloc ()
ফেরত a (অকার্যকর *) মান।

মেটাকনফিগ এমন একটি টুল যা আপনাকে না করার অতিরিক্ত সুবিধার সাথে ঠিক এটি করতে দেয়
সবকিছু ঠিকঠাক থাকলে মেকফাইলটি হ্যান্ড-এডিট করতে হবে। দৌড়ানোর মাধ্যমে metaconfig, আপনি একটি তৈরি
শেল স্ক্রিপ্ট নামে কনফিগার করুন. অনেক প্রচেষ্টা কনফিগার স্ক্রিপ্ট নিবেদিত করা হয়েছে
অভ্যন্তরীণ নিশ্চিত করতে এটি 99% বিদ্যমান শেলগুলিতে চলবে
লেখা কনফিগার টার্গেট সিস্টেমটি অনুসন্ধান করবে, সন্দেহ হলে প্রশ্ন জিজ্ঞাসা করবে এবং
একটি একক শেল ফাইলে সমস্ত উত্তর সংগ্রহ করুন, যার ফলে ব্যবহার করা যেতে পারে
স্বয়ংক্রিয়ভাবে কনফিগার করা Makefiles এবং C অন্তর্ভুক্ত ফাইল তৈরি করে।

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

কনফিগার স্ক্রিপ্টটি বেশ কয়েকটি ইউনিট তৈরি করা হয়েছে (300টির বেশি), প্রতিটি ইউনিট হচ্ছে
অল্প সংখ্যক শেল এবং/অথবা সি চিহ্ন সংজ্ঞায়িত করার জন্য দায়ী। ইউনিট একত্রিত হয়
একসাথে চূড়ান্ত পর্যায়ে, নির্ভরতা গ্রাফকে সম্মান করে (এক ইউনিটের ফলাফলের প্রয়োজন হতে পারে
অন্যান্য কয়েকটি ইউনিটের যা তারপর স্ক্রিপ্টের আগে স্থাপন করা হয়)।

প্রতীক
প্রতীক সবচেয়ে গুরুত্বপূর্ণ জিনিস metaconfig বিশ্ব তারাই সবচেয়ে ছোট
স্বীকৃত সত্তা, সাধারণত একটি শব্দ, এবং কনফিগারের শেষে একটি মান দেওয়া যেতে পারে
মৃত্যুদন্ড উদাহরণস্বরূপ, সি প্রাক-প্রসেসর প্রতীক HAS_RENAME ইহা একটি metaconfig প্রতীক যে
যদি, এবং শুধুমাত্র যদি, সংজ্ঞায়িত করা নিশ্চিত করা হয় নাম পরিবর্তন করুন() সিস্টেম কল উপস্থিত। একইভাবে,
দ্য $ranlib শেল ভেরিয়েবল ':' বা 'ranlib'-তে সেট করা হবে কিনা তা নির্ভর করে
কল রানলিব একটি লাইব্রেরি ফাইল অর্ডার করার জন্য প্রোগ্রাম প্রয়োজন। কিভাবে এই কাজ করে না
আপাতত গুরুত্বপূর্ণ, যা গুরুত্বপূর্ণ তা হল বুঝতে হবে যে সেই চিহ্নগুলি a দেওয়া হয়েছে জীবন
(অর্থাৎ একটি মান) উপর কনফিগার করুন মৃত্যুদন্ড।

প্রতীক ব্যবহার করা তুলনামূলকভাবে সহজবোধ্য। একটি সি সোর্স ফাইলে, আপনি কেবল প্রতীকটি ব্যবহার করেন
মান, একটি প্রাক-প্রসেসর নির্দেশিকা হিসাবে (উদাহরণস্বরূপ একটি: #ifdef HAS_RENAME) বা, প্রতীক হলে
মান হল একটি স্ট্রিং, সরাসরি যেমন আপনি C-তে একটি ম্যাক্রো ব্যবহার করবেন। এবং একটি শেল ফাইল বা একটিতে
Makefile, আপনি সরাসরি একটি শেল প্রতীক উল্লেখ করতে পারেন।

আসলে, আমি মিথ্যা বলছি, কারণ এটি আগের অনুচ্ছেদের মতো সম্পূর্ণরূপে জাদু নয়
শব্দ করতে পারে। একটি সি ফাইলে, আপনাকে কনফিগার-উত্পাদিত অন্তর্ভুক্ত করতে হবে config.h ফাইল, এবং
আপনাকে অবশ্যই আপনার শেল স্ক্রিপ্ট বা মেকফাইলকে একটি .SH ফাইলে মুড়ে দিতে হবে এবং আপনি শেলটি উল্লেখ করতে পারেন
শুধুমাত্র সেই .SH ফাইলের পরিবর্তনশীল প্রতিস্থাপন অংশে প্রতীক। এই সম্পর্কে পরে আরো.

উৎস নথি পত্র
প্রতীক শুধুমাত্র উৎস ফাইলের একটি সীমিত সেট প্রদর্শিত হতে পারে, কারণ metaconfig শুধুমাত্র
পরিচিত প্রতীকগুলি খুঁজতে গিয়ে সেগুলিকে স্ক্যান করুন, কোন ইউনিটগুলির প্রয়োজন হবে তা বের করার চেষ্টা করুন।
আপনি C সোর্স ফাইলে C চিহ্ন ব্যবহার করতে পারেন, যেমন a এর সাথে ফাইল .c, .h, .y or .l এক্সটেনশন, এবং
শেল চিহ্নগুলি শুধুমাত্র .SH ফাইলগুলিতে সন্ধান করা হয়।

একটি প্রতীকের মান পেতে, একটি C ফাইলে বিশেষটি অন্তর্ভুক্ত করতে হবে config.h
ফাইল, যা দ্বারা উত্পাদিত হয় কনফিগার করুন যখন C চিহ্ন উপস্থিত থাকে। এবং .SH ফাইলগুলি চালানো হয়
একটি শেলের মাধ্যমে, একটি নতুন ফাইল তৈরি করা। যাইহোক, .SH ফাইলের উপরের অংশে,
প্রশিক্ষণ config.sh ফাইল (চলমান দ্বারাও উত্পাদিত হয় কনফিগার করুন) সোর্সড, এবং পরিবর্তনশীল
প্রতিস্থাপন প্রযোজ্য। আসলে, config.h চলমান দ্বারা উত্পাদিত হয় metaconfig-produced
config_h.SH ফাইল, আবার পরিবর্তনশীল প্রতিস্থাপন ব্যবহার করে। তাই আমরা যে একটি তাকান চলুন
একটু বেশি ঘনিষ্ঠভাবে যেহেতু এই পুরো হৃদয় কনফিগারেশন পরিকল্পনা...

পরিবর্তনশীল প্রতিকল্পন
শেল গঠন বলা হয় এখানে দলিল যা একটি ইনপুট নিতে একটি কমান্ড সক্ষম করে
স্ক্রিপ্টের মধ্যেই নির্দিষ্ট করা হয়েছে। সেই ইনপুটটিকে শেল দ্বারা দ্বিগুণ হিসাবে ব্যাখ্যা করা হয়-
এখানে নথির ফর্মের উপর নির্ভর করে উদ্ধৃত স্ট্রিং বা একটি একক উদ্ধৃত স্ট্রিং
নির্দিষ্টকরণ।

এখানে একটি নথি নির্দিষ্ট করতে, '<<' টোকেন ব্যবহার করা হয়, একটি একক শনাক্তকারী দ্বারা অনুসরণ করা হয়। থেকে
তারপরে, অবশিষ্ট স্ক্রিপ্ট লাইন কমান্ডের জন্য ইনপুট গঠন করে, এখানে পর্যন্ত
নথি নিজেই একটি লাইন পাওয়া যায়. শেল প্রতিস্থাপন (শেল পরিবর্তনশীল সহ
প্রতিস্থাপন) করা হয় যদি না সনাক্তকারী একক উদ্ধৃতি দ্বারা বেষ্টিত হয়। এই ক্ষেত্রে:

var = 'প্রথম'
tar = 'সেকেন্ড'
echo "--> প্রথমে এখানে নথি:"
বিড়াল <
var='$var'
tar='$tar'
ইওএম
প্রতিধ্বনি "--> দ্বিতীয় এখানে নথি:"
বিড়াল <<'ইওএম'
প্রতিধ্বনি $var
প্রতিধ্বনি $tar
ইওএম
প্রতিধ্বনি "--> শেষ।"

একটি শেলের মধ্য দিয়ে চালানো হলে উত্পাদন করবে:

--> প্রথমে এখানে নথি:
var = 'প্রথম'
tar = 'সেকেন্ড'
--> দ্বিতীয় এখানে নথি:
প্রতিধ্বনি $var
প্রতিধ্বনি $tar
--> শেষ।

এখানে প্রথম নথিটির বিষয়বস্তু ব্যাখ্যা করা হয়েছে যেখানে দ্বিতীয়টি যেমন-আউটপুট।
উভয়ই একটি .SH স্ক্রিপ্টে দরকারী, যেমনটি আমরা দেখতে পাচ্ছি।

ব্যবহার .এসএইচ স্ক্রিপ্ট
একটি .SH স্ক্রিপ্ট সাধারণত চালানোর মাধ্যমে উত্পাদিত হয় MakeSH স্ক্রিপ্ট অন্য একটি বিদ্যমান ফাইল,
রূপান্তর ফাইল একটি মধ্যে ফাইল.এসএইচ. এর একটি একক উদাহরণ নেওয়া যাক. এখানে একটি ছোট স্ক্রিপ্ট আছে
(আসুন এটিকে কল করি intsize) যা একটি একক বার্তা প্রিন্ট করে, এর আকার কোন int সি-তে ডেটাটাইপ।
দুর্ভাগ্যবশত, এটির মান হার্ডওয়্যার আছে, এইভাবে:

#!/ বিন / SH
intsize='4'
প্রতিধ্বনি "এই মেশিনে, int টাইপ হল $intsize বাইট"

চলুন দৌড়াই makeSH টাইপ করে তার উপর 'makeSH intsize' আমরা একটি একক পেতে intsize.SH ফাইল যে
এটা এমন দেখতে:

ক্ষেত্রে $CONFIG ইন
'')
if test -f config.sh; তারপর TOP=.;
elif পরীক্ষা -f ../config.sh; তারপর TOP=..;
elif পরীক্ষা -f ../../config.sh; তারপর TOP=../ ..;
elif পরীক্ষা -f ../../../config.sh; তারপর TOP=../../..;
elif পরীক্ষা -f ../../../../config.sh; তারপর TOP=../../../.;
আর
প্রতিধ্বনি "config.sh খুঁজে পাচ্ছি না"; প্রস্থান 1
fi
. $TOP/config.sh
;;
যে সি
: এটি SH ফাইলকে SH ফাইলের মতো একই ডিরেক্টরিতে লক্ষ্য তৈরি করতে বাধ্য করে।
: এটা যাতে নির্ভর করে সবসময় জানে কোথায় SH ডেরিভেটিভস খুঁজে পাওয়া যায়।
কেস "$ 0" ইন
*/*) cd `expr X$0 : 'X\(.*\)/'`;;
যে সি
প্রতিধ্বনি "ইন্টসাইজ নিষ্কাশন করা (ভেরিয়েবল প্রতিস্থাপন সহ)"
: ফাইলের এই বিভাগে পরিবর্তনশীল প্রতিস্থাপন করা হবে।
: যেকোন কিছুর কনফিগার সাব এর থেকে সরান!না!SUBS! বিভাগ থেকে !GROK!এই!
: আপনি ব্যাখ্যা করতে চান না এমন কোনো ডলারের চিহ্ন এবং ব্যাকটিক্স রক্ষা করুন
: সামনে একটি ব্যাকস্ল্যাশ রেখে। আপনি এই মন্তব্য মুছে ফেলতে পারেন.
$spitshell >intsize <
$startsh
!গ্রোক!এই!

: নিম্নলিখিত ডলার এবং ব্যাকটিক্সে অতিরিক্ত ব্যাকস্ল্যাশের প্রয়োজন নেই।
$spitshell >>intsize <<'!না!SUBS!'
intsize='4'
প্রতিধ্বনি "এই মেশিনে, int টাইপ হল $intsize বাইট"
!না!সাবস!
chmod 755 ইনটসাইজ
$eunicefix intsize

এই স্ক্রিপ্টের প্রথম অংশ (এ কেস বিবৃতি) সনাক্ত করার চেষ্টা করছে config.sh
ফাইল, এটি উৎস করার জন্য। দ্য $CONFIG পরিবর্তনশীল ডিফল্টরূপে মিথ্যা, সত্য দ্বারা যখন
config.sh ইতিমধ্যেই সোর্স করা হয়েছে (যদি এই ফাইলটি থেকে এক্সিকিউট করা হয় তাহলে এটি হবে
মধ্যে কনফিগার করুন নিজেই, কিন্তু আসুন এখানে সমস্যাটি বিভ্রান্ত না করি)।

একদা config.sh ফাইল সূত্র হয়েছে, সমস্ত শেল চিহ্ন দ্বারা সংজ্ঞায়িত করা হয়েছে কনফিগার করুন হয়
সেট আমরা জানি একটি দ্বিতীয় কেস স্টেটমেন্টে পৌঁছানো, বর্তমান ডিরেক্টরি পরিবর্তন করতে ব্যবহৃত হওয়া উচিত a
এই প্রোগ্রামে পৌঁছানোর জন্য পথ ব্যবহার করা হবে (উদাহরণস্বরূপ যদি আমরা বলি 'sh ../scripts/intsize.SH', আমরা
প্রথমে চালাবে'cd ../স্ক্রিপ্ট' চালিয়ে যাওয়ার আগে)। আপনি যদি এই বুঝতে না পারেন, না
এটার ব্যাপারে দুশ্চিন্তা কর.

এখানে ইন্টারস্টিং জিনিস আসে. এই স্ক্রিপ্ট ব্যবহার করে $স্পিটশেল পরিবর্তনশীল, এবং এটা না
এমন কিছু যা আমরা এখনো জানি... আপনি যদি শব্দকোষ ফাইলটি দেখেন তবে আপনি এটি দেখতে পাবেন
এটি দ্বারা পরিচিত একটি পরিবর্তনশীল metaconfig. আপনি যদি এই ফাইলটি আপনার বিতরণের অংশ করেন
(MANIFEST.new ফাইলে এটি অন্তর্ভুক্ত করে, আমরা পরে এটিতে ফিরে আসব) এবং চালাব
metaconfig, এরপর কনফিগার করুন স্ক্রিপ্ট এই ভেরিয়েবলের জন্য একটি উপযুক্ত মান নির্ধারণ করবে
এবং এটা সেট করা হবে config.sh। একই জন্য যায় $startsh এবং রহস্যময় $eunicefix at
শেষ একটি যুক্তিসঙ্গত সিস্টেমে, প্রাসঙ্গিক অংশ config.sh এই মত দেখতে হবে:

spitshell = 'বিড়াল'
startsh='#!/ বিন / SH'
eunicefix=':'

আহ! আমরা সেখানে যাচ্ছি. এখন চেনা চেনা লাগছে। আমরা একটি একক সম্মুখীন করছি বিড়াল আদেশ যার
ইনপুট একটি পরিবর্তনশীল-ইন্টারপোলেটেড এখানে নথি থেকে আসে এবং যার আউটপুট পুনঃনির্দেশিত হয়
intsize. এর মান হবে $startsh, অর্থাৎ '#!/ বিন / SH' এখন পর্যন্ত ভালো।

তারপরে আমরা স্ক্রিপ্টের অবশিষ্টাংশ পেতে দ্বিতীয় এখানে নথি সম্প্রসারণে পৌঁছাই। এই
সময়, এখানে নথির প্রতীক একক উদ্ধৃতি দ্বারা বেষ্টিত হয় তাই বিষয়বস্তু হবে
এর সাথে যুক্ত করা হয়েছে intsize ফাইল তাই দৌড়ে'sh intsize.SH', আমরা পেতে
নিম্নলিখিত আউটপুট:

ইনটসাইজ বের করা হচ্ছে (ভেরিয়েবল প্রতিস্থাপন সহ)

এবং উত্পাদিত intsize ফাইলটি দেখে, আমরা দেখতে পাই:

#!/ বিন / SH
intsize='4'
প্রতিধ্বনি "এই মেশিনে, int টাইপ হল $intsize বাইট"

যা আমরা শুরুতে ছিল ঠিক কি. এখন পর্যন্ত, এটি একটি নো-অপারেশন পদ্ধতি...
কিন্তু, কত বিস্ময়কর! এটা তাই ঘটে (বিশুদ্ধ কাকতালীয়, আমাকে বিশ্বাস করুন!), যে metaconfig জানে
সম্বন্ধে $intsize শেল প্রতীক। ইনটসাইজের ইনিশিয়ালাইজেশনকে ভেরিয়েবলে নিয়ে যাওয়ার মাধ্যমে-
.SH স্ক্রিপ্টের ইন্টারপোলেটেড এলাকা এবং এটি দিয়ে শুরু করা কনফিগার করুন- গণনা করা মান,
এবং দ্বারা যোগ করা এখন অকেজো মন্তব্য অপসারণ makeSH, আমরা পেতে:

ক্ষেত্রে $CONFIG ইন
'')
if test -f config.sh; তারপর TOP=.;
elif পরীক্ষা -f ../config.sh; তারপর TOP=..;
elif পরীক্ষা -f ../../config.sh; তারপর TOP=../ ..;
elif পরীক্ষা -f ../../../config.sh; তারপর TOP=../../..;
elif পরীক্ষা -f ../../../../config.sh; তারপর TOP=../../../.;
আর
প্রতিধ্বনি "config.sh খুঁজে পাচ্ছি না"; প্রস্থান 1
fi
. $TOP/config.sh
;;
যে সি
কেস "$ 0" ইন
*/*) cd `expr X$0 : 'X\(.*\)/'`;;
যে সি
প্রতিধ্বনি "ইন্টসাইজ নিষ্কাশন করা (ভেরিয়েবল প্রতিস্থাপন সহ)"
$spitshell >intsize <
$startsh
intsize='$intsize'
!গ্রোক!এই!

$spitshell >>intsize <<'!না!SUBS!'
প্রতিধ্বনি "এই মেশিনে, int টাইপ হল $intsize বাইট"
!না!সাবস!
chmod 755 ইনটসাইজ
$eunicefix intsize

অবশ্যই, একটি শেলের মাধ্যমে এই স্ক্রিপ্টটি চালানো আবার একই স্ক্রিপ্ট আউটপুট করবে। কিন্তু যদি
আমরা চালাই কনফিগার করুন একটি মেশিনে যেখানে একটি কোন int একটি 64 বিট পরিমাণ হিসাবে সংরক্ষণ করা হয়, config.sh ইচ্ছা
সেট intsize 8 এবং intsize স্ক্রিপ্ট সঠিক মান বহন করবে এবং মুদ্রণ করবে:

এই মেশিনে, int টাইপ 8 বাইট

যা সঠিক. অভিনন্দন! আমরা শুধু একটি শেল স্ক্রিপ্ট কনফিগার করেছি!!

আবহ config.h
আমরা এখন উপায় একটি চেহারা থাকতে পারে config.h থেকে উত্পাদিত হয় config_h.SH। আমরা জানি যে
দৌড় কনফিগার করুন উত্পাদন করে a config.sh স্ক্রিপ্ট (এটি ঠিক কীভাবে করা হয় তা কঠোরভাবে নয়
এখানে প্রাসঙ্গিক, কিন্তু কৌতূহলীদের জন্য, এটি এখানে আরেকটি নথি প্রতিস্থাপন
কনফিগার করুন নিজেই)। দ্য config_h.SH নিজেই দ্বারা নির্মিত হয় metaconfig একই সময়ে
কনফিগার করুন যদি আপনি আপনার উত্সের মধ্যে অন্তত একটি C চিহ্ন ব্যবহার করেন।

এর কিছু র্যান্ডম কটাক্ষপাত আছে config_h.SH সত্যিই কি ঘটে তা দেখতে ফাইল করুন:

ক্ষেত্রে $CONFIG ইন
'')
if test -f config.sh; তারপর TOP=.;
elif পরীক্ষা -f ../config.sh; তারপর TOP=..;
elif পরীক্ষা -f ../../config.sh; তারপর TOP=../ ..;
elif পরীক্ষা -f ../../../config.sh; তারপর TOP=../../..;
elif পরীক্ষা -f ../../../../config.sh; তারপর TOP=../../../.;
আর
প্রতিধ্বনি "config.sh খুঁজে পাচ্ছি না"; প্রস্থান 1
fi
. $TOP/config.sh
;;
যে সি
কেস "$ 0" ইন
*/*) cd `expr X$0 : 'X\(.*\)/'`;;
যে সি
প্রতিধ্বনি "config.h এক্সট্রাক্ট করা হচ্ছে (ভেরিয়েবল প্রতিস্থাপন সহ)"
sed < config.h -e's!^#undef!/define!' -e's!^#un-def!#undef!'
/*
* এই ফাইলটি config_h.SH স্ক্রিপ্ট চালানোর মাধ্যমে তৈরি করা হয়েছে, যা
* config.sh থেকে এর মান পায়, যা সাধারণত দ্বারা উত্পাদিত হয়
* চলমান কনফিগার।
*
* প্রয়োজন দেখা দিলে নির্দ্বিধায় এটির যেকোনো একটি পরিবর্তন করুন। উল্লেখ্য, তবে,
* যে চলমান config.h.SH আবার আপনার করা যেকোনো পরিবর্তন মুছে ফেলবে।
* আরও স্থায়ী পরিবর্তনের জন্য config.sh সম্পাদনা করুন এবং config.h.SH পুনরায় চালান।
*/

/* কনফিগারেশন সময়: $cf_time
* এর দ্বারা কনফিগার করা হয়েছে: $cf_by
* টার্গেট সিস্টেম: $myuname
*/

#ifndef _config_h_
# _config_h_ সংজ্ঞায়িত করুন

/* bcopy:
* এই চিহ্নটি memcpy-তে ম্যাপ করা হয় যদি bcopy() রুটিন না হয়
* স্ট্রিং কপি করার জন্য উপলব্ধ।
*/
/* HAS_BCOPY:
* এই চিহ্নটি সংজ্ঞায়িত করা হয় যদি bcopy() রুটিন পাওয়া যায়
* মেমরি ব্লক কপি. আপনি নীচে এই চিহ্ন ব্যবহার করা উচিত নয়
* স্বাভাবিক পরিস্থিতিতে এবং পরিবর্তে সরাসরি bcopy() ব্যবহার করুন, যা
* bcopy উপলব্ধ না হলে memcpy() এ ম্যাপ করা হবে।
*/
#$d_bcopy HAS_BCOPY /**/
#ifndef has_BCOPY
#ifdef bcopy
#un-def bcopy
#endif
#bcopy(s,d,l) memcpy((d),(s),(l)) /* memcpy এ ম্যাপ করা */ সংজ্ঞায়িত করুন
#endif

/* HAS_DUP2:
* এই প্রতীক, যদি সংজ্ঞায়িত করা হয়, নির্দেশ করে যে dup2 রুটিন
* ডুপ্লিকেট ফাইল বর্ণনাকারীর জন্য উপলব্ধ।
*/
#$d_dup2 HAS_DUP2 /**/

/* I_STRING:
* এই চিহ্ন, যদি সংজ্ঞায়িত করা হয়, সি প্রোগ্রামকে নির্দেশ করে যে এটি করা উচিত
* অন্তর্ভুক্ত (USG সিস্টেম) এর পরিবর্তে (বিএসডি সিস্টেম)।
*/
#$i_string I_STRING /**/

#endif
!গ্রোক!এই!

ফাইলের শীর্ষে, আমরা ইতিমধ্যেই যে স্ট্যান্ডার্ড .SH কনস্ট্রাকশনটি চিনতে পারি
বিস্তারিত অধ্যয়ন. এর পরে একটি এখানে নথির মাধ্যমে ফাইল নিজেই নিষ্কাশন আসে
পরিবর্তনশীল প্রতিস্থাপন। যাইহোক, এখানে আমরা একটি প্লেইন ব্যবহার করি না বিড়াল কিন্তু একটি কিন্তু পরিবর্তে, যেহেতু
আমাদের আরও কিছু সম্পাদনা অন-দ্য-ফ্লাই করতে হবে। কেন আমরা পরে দেখব, তাই আসুন ভুলে যাই
এই মুহূর্তে এটি সম্পর্কে

আমরা এখন শীর্ষস্থানীয় মন্তব্যে পৌঁছেছি, এবং ফাইলটিকে কনফিগারেশনের সময় দিয়ে ট্যাগ করা হয়েছে
টার্গেট সিস্টেম, ইত্যাদি... (এই ভেরিয়েবলগুলি উৎস থেকে আসছে config.sh ফাইল হয়েছে
দ্বারা সেট আপ কনফিগার করুন) সেই মন্তব্যের শিরোনামটি পাহারার জন্য একটি '#ifndef' সুরক্ষা দ্বারা অনুসরণ করা হয়েছে
এই ফাইলের একাধিক অন্তর্ভুক্তির বিরুদ্ধে। তারপর ফাইলের হৃদয় আসে ...

এটা জানতে সাহায্য করে $d__* এবং $i__* ভেরিয়েবলগুলি হয় সেট করা হয় 'নির্ধারণ করা'বা'undef' দ্বারা
কনফিগার করুন, সিস্টেমে একটি ফাংশন বা একটি অন্তর্ভুক্ত ফাইল উপস্থিত আছে কিনা তার উপর নির্ভর করে বা
না. এর মানে হল:

#$d_bcopy HAS_BCOPY /**/

লাইনটি যেকোনো একটিতে প্রসারিত হবে:

#হাস_বিসিকপি সংজ্ঞায়িত করুন /**/

যদি $d_bcopy ভেরিয়েবল 'সংজ্ঞায়িত' বা সেট করা থাকে:

#undef has_BCOPY /**/

যদি $d_bcopy 'undef' এ সেট করা হয়, কারণ বৈশিষ্ট্যটি সেখানে ছিল না। যাইহোক, তা নয়
কি লেখা হয় config.h ফাইলের কারণে কিন্তু ফিল্টার আমরা ইতিমধ্যে দেখেছি,
যা দ্বিতীয় ফর্মটিকে এতে রূপান্তরিত করবে:

/*#HAS_BCOPY সংজ্ঞায়িত করুন /**/

এটি পরবর্তী সম্পাদনার জন্য একটি সহজ ফর্ম config.h কারণ আপনাকে শুধুমাত্র অপসারণ করতে হবে
অগ্রণী '/*' যদি আপনি ওভাররাইড করতে চান কনফিগার করুনএর পছন্দ। একইভাবে, আপনি একটি একক যোগ করতে পারেন
একটি নির্দিষ্ট চিহ্নের সংজ্ঞা এড়াতে '#define' লাইনের শুরুতে '/*'।
এই কারণেই প্রতিটি চিহ্নের সংজ্ঞা একটি ট্রেলিং '/**/' দ্বারা সুরক্ষিত, লিডিং বন্ধ করতে
মন্তব্য '/*' দ্বারা খোলা হয়েছে (মন্তব্যগুলি সি-তে নেস্ট করা হয় না)।

এখন '#undef' কে '/*#define' এ রূপান্তর করা চমৎকার, কিন্তু আমরা যদি আসলে একটি লিখতে চাই
'#undef', আমরা আটকে আছি... যদি না আমরা এটিকে '#un-def' হিসেবে লিখি এবং যাক কিন্তু এটিকে '#undef' এ ঠিক করুন
উৎপাদন করার সময় config.h, যা আসলে এখানে কি করা হয়.

একই ধরণের যুক্তি সেই দুটি লাইনের ক্ষেত্রে প্রযোজ্য:

#$d_dup2 HAS_DUP2 /**/
#$i_string I_STRING /**/

এবং অনুমান config.sh সংজ্ঞায়িত করে:

d_dup2='সংজ্ঞায়িত করুন'
i_string = 'undef'

আমরা উত্পাদিত পেতে হবে config.h:

# সংজ্ঞায়িত করুন HAS_DUP2 /**/
/*#I_STRING সংজ্ঞায়িত করুন /**/

চলমান জল হিসাবে পরিষ্কার? ভাল!

এখন এটি অন্তর্ভুক্ত করে স্পষ্ট হওয়া উচিত config.h আপনার সমস্ত সি সোর্স ফাইলে, আপনি পেতে পারেন
জানেন কি কনফিগার করুন আপনার সিস্টেমে অনুমান করেছে। কার্যত, সেই চিহ্নগুলি ব্যবহার করে, আপনি
কনফিগার করা সি কোড লেখা, যেহেতু metaconfig আপনি ঐ প্রতীক এবং ইচ্ছা প্রয়োজন যে জানবে
একটি উপযুক্ত উৎপন্ন config_h.SH ফাইলের পাশাপাশি সমস্ত প্রয়োজনীয় কোড ইন কনফিগার করুন থেকে
তাদের জন্য একটি সঠিক মান গণনা করুন (সংশ্লিষ্ট শেল ভেরিয়েবলের মান নির্ধারণ করে)।

চলমান Metaconfig
এর উপর ফোকাস করা যাক metaconfig এটি তার ইউনিটগুলি কীভাবে ব্যবহার করে তা বোঝার জন্য কিছুক্ষণের জন্য প্রোগ্রাম এবং
সমস্ত প্রয়োজনীয় কনফিগারেশন ফাইল তৈরি করতে আপনার সোর্স কোড। নতুন করে লেখার ইচ্ছে থাকলে
ইউনিট, আপনার পুরো স্কিম সম্পর্কে ভাল ধারণা থাকা উচিত।

যদি কোন MANIFEST.new ফাইল না থাকে, metaconfig পরিবর্তে ম্যানিফেস্ট ফাইল ব্যবহার করার চেষ্টা করবে,
সুবিধার জন্য. আমরা যেখানেই MANIFEST.neউ উল্লেখ করি, সেটিকে MANIFEST হিসেবে বোঝা যায়
আপনার প্যাকেজের মূলে কোনো MANIFEST.new ফাইল পাওয়া না গেলে

ধরে নিচ্ছি আপনার MANIFEST.new ফাইলটি সঠিকভাবে সেট করা আছে এবং আপনি যে সমস্ত উৎস ফাইলগুলি করতে চান তা তালিকাভুক্ত করে
কনফিগার করুন, এবং আপনি রান করেছেন প্যাকিং আপনার রুট সোর্স ডিরেক্টরিতে একটি তৈরি করুন
.প্যাকেজ ফাইল, আপনি চালাতে পারেন metaconfig এবং আপনি নিম্নলিখিত পাবেন:

$ metaconfig
ইউনিট সনাক্ত করা হচ্ছে...
312 ইউনিট থেকে নির্ভরতা তালিকা বের করা হচ্ছে...
MANIFEST.new থেকে ফাইলের নাম (*[chyl] এবং *.SH) বের করা হচ্ছে...
একটি ওয়ান্টেড ফাইল তৈরি করা হচ্ছে...
প্রতীকের জন্য [chyl] ফাইল স্ক্যান করা হচ্ছে...
চিহ্নের জন্য .SH ফাইল স্ক্যান করা হচ্ছে...
সর্বোত্তম নির্ভরতা গ্রাফ গণনা করা হচ্ছে...
ব্যক্তিগত ফাইল তৈরি করা হচ্ছে...
লোডযোগ্য ইউনিট নির্ধারণ করা হচ্ছে...
মেক ফাইল আপডেট করা হচ্ছে...
ইউনিটের জন্য সঠিক ক্রম নির্ধারণ করা হচ্ছে...
কনফিগার তৈরি করা হচ্ছে...
সম্পন্ন.

প্রথম ধাপটি পাবলিক ডিরেক্টরিতে সমস্ত ইউনিট ফাইল (.U দিয়ে শেষ) সন্ধান করে
প্রথম, তারপর আপনার ব্যক্তিগত এক. আপনি যদি আপনার ব্যক্তিগত U ডিরেক্টরিতে একটি পাবলিক ফাইল কপি করেন
(যেমন আপনার প্যাকেজের শীর্ষ স্তরে U নামের একটি ডিরেক্টরি), এটি সর্বজনীনকে ওভাররাইড করবে
সংস্করণ একবার এটিতে সমস্ত উপলব্ধ ইউনিটগুলির একটি তালিকা থাকলে, এটি সেগুলিকে পার্স করে এবং সবগুলিকে বের করে
MAKE: নির্ভরতা এবং পরিচিত শেল চিহ্ন সম্পর্কে জানতে লাইন। এটাও
C চিহ্নগুলি সম্পর্কে জানতে ?H: লাইনগুলির উপর ফোকাস করে এবং কোন শেল চিহ্নগুলি হওয়া দরকার
সেই সি চিহ্নের জন্য একটি সঠিক মান পেতে গণনা করা হয়েছে (তাই আমাদের নির্ভরতার আরেকটি স্তর রয়েছে
এখানে).

এরপরে, সঠিক ফাইলের নামগুলো MANIFEST.new ফাইল থেকে বের করা হয় এবং a ওয়ান্টেড ফাইল হয়
বিল্ট: সেই ফাইলটি সেই প্যাকেজের জন্য প্রয়োজনীয় সমস্ত সি চিহ্ন এবং শেল প্রতীক তালিকাভুক্ত করে। আমরা
প্রথমে C প্রতীকগুলির জন্য C-টাইপ ফাইলগুলি স্ক্যান করুন, তারপরে তাদের নির্ভরতাগুলি প্রচার করুন
সংশ্লিষ্ট শেল প্রতীক (? H: লাইন থেকে সংগৃহীত)। পরবর্তী .SH ফাইল স্ক্যান করা হয় এবং অবশেষে
সমস্ত শেল প্রতীক পরিচিত।

একটি অস্থায়ী মেকফাইল তৈরি করা হয় এবং মেটাকনফিগ করার চেষ্টা করে করা সব শেল প্রতীক দেখতে
কোন কমান্ডগুলি (দ্বিতীয়? MAKE: লাইনে তালিকাভুক্ত) কার্যকর করা হয় এবং এইভাবে কোন ইউনিটগুলি
সত্যিই প্রয়োজন. অন্যথায় প্রয়োজনীয় নয় এমন ঐচ্ছিক ইউনিটগুলি সরানো হয় এবং একটি দ্বিতীয় মেকফাইল হয়
উত্পন্ন এইবার, আমরা ঐচ্ছিক সমস্ত ইউনিট এবং তাদের নিজ নিজ অর্ডার সম্পর্কে জানি
ইউনিটগুলি সরানো হয়েছে এবং তাদের শেল প্রতীকগুলির জন্য ডিফল্ট মান গণনা করা হয়েছে। দ্য
কনফিগার করুন তারপর সহ স্ক্রিপ্ট তৈরি করা যেতে পারে config_h.SH. সম্পন্ন করা হয়েছে.

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

সমস্ত ইউনিটে তাদের প্রথম অক্ষর ছোট হাতের হওয়া উচিত, যদি না তারা বিশেষ ইউনিট হয়। দ্বারা
বিশেষ, আমরা বলতে চাচ্ছি যে তারা নতুন শেল ভেরিয়েবলগুলিকে সংজ্ঞায়িত করে না যা দ্বারা ব্যবহার করা যেতে পারে
ব্যবহারকারী তার .SH ফাইলে, বরং স্ক্রিপ্ট বা শেল ভেরিয়েবল উৎপাদনকারী ইউনিট
দ্বারা অভ্যন্তরীণভাবে ব্যবহার করা হবে কনফিগার করুন লিপি. সাধারণ উদাহরণ হল Init.U ফাইল যা
প্রধান পরিবর্তনশীল সূচনা, বা Myread.U যা উত্পাদন করে আমার পড়া স্ক্রিপ্ট প্রায় ব্যবহৃত
সর্বত্র কনফিগার করুন যখন ব্যবহারকারীকে একটি প্রশ্ন জিজ্ঞাসা করা হয়।

অ-বিশেষ ইউনিটগুলি তখন দুটি স্বতন্ত্র গোষ্ঠীতে উপবিভাজন করে: একক পরিবর্তনশীল সংজ্ঞায়িত করে
একটি C চিহ্নের সাথে যুক্ত এবং তাদের নিজস্ব শেল ভেরিয়েবল সংজ্ঞায়িত করে। প্রথম দল
ফাইলগুলি অন্তর্ভুক্ত করার সাথে সম্পর্কিত ভেরিয়েবলগুলিতে আরও বিভক্ত (তাদের নাম দিয়ে শুরু হয় i_) এবং
অন্যান্য সংজ্ঞা সম্পর্কিত ভেরিয়েবল (নাম দিয়ে শুরু d_) দ্বিতীয় গ্রুপ আছে
নিজের জন্য দাঁড়ানো নাম, উদাহরণস্বরূপ cc.U সংজ্ঞায়িত $cc শেল ভেরিয়েবল যার মান
C কম্পাইলার ব্যবহার করতে হবে।

বিশেষ ইউনিট কখনও কখনও নিজেদের জন্য কিছু পূর্ব-সংজ্ঞায়িত পরিবর্তনশীল সংরক্ষণ করে এবং "ফলাফল" প্রদান করে
অন্যান্য সুপরিচিত ভেরিয়েবলে। উদাহরণস্বরূপ, আমার পড়া Myread.U দ্বারা উত্পাদিত স্ক্রিপ্ট
মধ্যে প্রম্পট আশা $আরপি, মধ্যে ডিফল্ট উত্তর $dflt এবং ব্যবহারকারীর উত্তরটি ভিতরে রাখে $ans.
এই ম্যানুয়াল পৃষ্ঠায় এটি নথিভুক্ত করা হয়নি: আপনাকে যেতে হবে এবং ইউনিটটি দেখতে হবে
কোন ভেরিয়েবল ব্যবহার করা হয় এবং কিভাবে ইউনিট ব্যবহার করা হয় তা বুঝুন।

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

একদিন, আপনি সম্ভবত আপনার নিজের ইউনিট লিখবেন এবং আপনি যথেষ্ট পরিমাণে জানতে পারবেন metaconfig
তাই দ্রুত এবং দক্ষতার সাথে করতে. যাইহোক, আপনার কাজ সঠিকভাবে নথিভুক্ত করতে ভুলবেন না
?S: এবং ?C: লাইন, বা অন্য লোকেরা এটি পুনরায় ব্যবহার করতে সক্ষম হবে না। সম্পর্কে মনে রাখবেন
শুরু করার জন্য আপনার কাছে শুধুমাত্র শব্দকোষ এবং এই ম্যানুয়াল পৃষ্ঠাটি ছিল।

উপসংহার
এখন আপনি জানেন যে metaconfig মৌলিক, আপনি পড়া উচিত বর্ণনাঃ বিভাগ, তারপর
এড়িয়ে যান REFERENCE, সমস্ত রক্তাক্ত বিবরণ সম্পর্কে জানতে বিভাগ যেমন অনুমোদিত
ইউনিট কন্ট্রোল লাইনের জন্য সিনট্যাক্স (একটি '?' দিয়ে শুরু হওয়া লাইন) বা স্বতন্ত্র মেক কমান্ড
আপনি ব্যবহার করার অনুমতি দেওয়া হয়।

REFERENCE,


এই বিভাগে অভ্যন্তরীণ নথিভুক্ত metaconfig, মূলত ইউনিট সিনট্যাক্স, বিশেষ
ইউনিট এবং ইঙ্গিত ফাইল সম্পর্কে আপনার জানা উচিত।

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

যদি একটি নিয়ন্ত্রণ রেখা খুব দীর্ঘ হয়, তাহলে ফাইনাল থেকে পালানোর মাধ্যমে একটি ধারাবাহিকতা ব্যবহার করা সম্ভব
একটি ব্যাকস্ল্যাশ সহ new-line এবং পরবর্তী লাইনে অবিরত (যা তারপর ইন্ডেন্ট করা উচিত
স্পেস বা ট্যাব দ্বারা)।

নীচে প্রতিটি নিয়ন্ত্রণ লাইনের একটি আনুষ্ঠানিক বিবরণ রয়েছে। যদি না বলা হয়
অন্যথায়, এই উপস্থাপনার ক্রমটি ইউনিটের মধ্যে ব্যবহার করার আদেশ।

?RCS: বিনামূল্যে পাঠ
ইউনিটের শীর্ষে RCS মন্তব্যের জন্য ব্যবহার করা হবে।

?এক্স: কোন পাঠ
সাধারণ উদ্দেশ্য মন্তব্য. ইউনিটের যে কোন জায়গায় উপস্থিত হতে পারে তবে অবশ্যই ন্যায্যভাবে ছেড়ে দিতে হবে।
RCS মন্তব্যের জন্য, অনুগ্রহ করে ?RCS: মন্তব্য ফর্মটি ব্যবহার করুন।

তৈরি করুন:প্রতীক তালিকা: বশ্যতা তালিকা [+ঐচ্ছিক]
এটি প্রথম নির্ভরতা লাইন। প্রথম প্রতীক তালিকা সমস্ত প্রতীক তালিকাভুক্ত করা উচিত
এই ইউনিট দ্বারা নির্মিত (অর্থাৎ যার মান ইউনিটের শেল বিভাগ দ্বারা গণনা করা হয়)।
প্রতীক স্থান পৃথক করা উচিত. যদি একটি সংজ্ঞায়িত প্রতীক শুধুমাত্র অভ্যন্তরীণ ব্যবহারের জন্য হয় এবং
উত্পন্ন প্রদর্শিত হবে না config.sh ফাইল, তারপর এটি একটি দ্বারা আগে করা উচিত
'+' (এর পরে সংজ্ঞায়িত ঐচ্ছিক নির্ভরতার সাথে বিভ্রান্ত হবেন না)। দ্বিতীয়
তালিকার অংশ (মাঝখানে ':' এর পরে) হল ইউনিট নির্ভরতা। এটা সব তালিকা করা উচিত
প্রয়োজনীয় বিশেষ ইউনিট, সেইসাথে শেল দ্বারা ব্যবহৃত সমস্ত প্রতীক
বাস্তবায়ন. যদি একটি প্রতীক nedded হয় কিন্তু তার কনফিগারেশন মান সমালোচনামূলক না হয়, এটি
একটি '+' দ্বারা পূর্বে হতে পারে, এই ক্ষেত্রে এটি একটি শর্তাধীন নির্ভরতা বলা হয়: তার
সংশ্লিষ্ট ইউনিট লোড করা হবে যদি, এবং শুধুমাত্র যদি, সেই প্রতীকটি অন্যথায় সত্যিই হয়
চেয়েছিলেন; অন্যথায় ডিফল্ট মান ব্যবহার করা হবে।

তৈরি করুন:ট্যাব হুকুম
প্রাথমিক নির্ভরতা লাইন অনুসরণ করে এক বা একাধিক কমান্ড লাইন থাকতে পারে। সেগুলো
যখন ইউনিট লোড করতে চায় তখন কমান্ডগুলি কার্যকর করা হবে কনফিগার করুন। দেখ
আরও তথ্যের জন্য কমান্ড তৈরি করুন সম্পর্কে অনুচ্ছেদ। উল্লেখ্য যে নেতৃস্থানীয় ট্যাব
এর আগে অক্ষর প্রয়োজন হুকুম.

?Y:বিন্যাস
এই ইউনিটের জন্য একটি লেআউট নির্দেশিকা ঘোষণা করুন। যে নির্দেশ স্ট্রিং এক হতে পারে
শীর্ষ, ডিফল্ট or পাদ (কেস কোন ব্যাপার না, প্রস্তাবিত শৈলী হল তাদের বানান করা
বড় হাতের)। বাদ দিলে, ডিফল্ট অনুমান করা হচ্ছে.

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

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

?স:প্রতীক_নাম [(অপ্রচলিত প্রতীক তালিকা)]:
একটি শেল প্রতীক প্রবর্তন করে। এই প্রথম লাইনটি প্রতীকটির নাম দেয়, ঐচ্ছিকভাবে a দ্বারা অনুসরণ করে
তালিকা বন্ধনী এবং অপ্রচলিত সমতুল্য প্রদানের মধ্যে আবদ্ধ। যারা অপ্রচলিত
চিহ্নগুলিকে নতুন করে রিম্যাপ করা হবে প্রতীক_নাম যদি -o অপশন দেওয়া হয়
metaconfig.

?স:কোন পাঠ্য, উন্নত টিপ্পনি
মূলত শেল প্রতীক বর্ণনা করে একটি মন্তব্য, যা দ্বারা নিষ্কাশন করা হবে মেকগ্লস
শব্দকোষ ফাইলে।

?এস:। শেল প্রতীক মন্তব্য বন্ধ করে।

?গ:প্রতীক_নাম [~ উপনাম] [(অপ্রচলিত প্রতীক তালিকা)]:
একটি নতুন C প্রতীক প্রবর্তন করে। দ্য উপনাম name হল সেই নাম যার নিচে C চিহ্ন থাকবে
নিয়ন্ত্রিত করা, অর্থাৎ যদি উপনাম প্রতীক চাই, তারপর সেই সি চিহ্নটি লেখা হবে
মধ্যে config_h.SH ফাইল সাধারণত, উপনাম শুধুমাত্র '%<' (ইউনিটের নাম বোঝায়)
এবং সেখানে একটি ?W: লাইন ম্যাপিং একটি C চিহ্নের সাথে উপনাম. এছাড়াও প্রাসঙ্গিক অংশ
H: লাইনগুলি স্পষ্টভাবে '?%<' শর্ত দ্বারা সুরক্ষিত। প্রতীক দেখুন
আরো বিস্তারিত জানার জন্য অনুচ্ছেদ উপনামকরণ. লাইনের অবশিষ্টাংশ ঐচ্ছিক
অপ্রচলিত প্রতীক তালিকা, যা নতুনের জন্য পুরানো সমতুল্য তালিকা করে প্রতীক_নাম.

?গ:কোন পাঠ্য, উন্নত টিপ্পনি এবং config_h.SH
মূলত সি চিহ্নের বর্ণনা দিয়ে একটি মন্তব্য, যা দ্বারা নিষ্কাশন করা হবে মেকগ্লস
শব্দকোষ ফাইলে এবং দ্বারা metaconfig মধ্যে config_h.SH ফাইল যদি প্রতীক হয়
ওয়ান্টেড (অথবা যদি সিম্বল অ্যালিয়াসিং ব্যবহার করা হয় তখন এর উপনাম চাই)।

?গ:। C প্রতীক মন্তব্য বন্ধ করে।

?এইচ:?প্রতীক:config_h.SH কাপড়
এই মধ্যে সাধারণ অন্তর্ভুক্তির অনুরোধ config_h.SH. লাইনটা তখনই লেখা হয় যখন
পাহারা প্রতীক সত্যিই চাই. এই সাধারণ ফর্ম প্রয়োজন যখন C চিহ্ন
অ্যালিয়াসিং ব্যবহার করা হয়েছিল। অন্যথায়, আপনি যদি অন্য "স্ট্যান্ডার্ড" ফর্মগুলির একটি ব্যবহার করেন, তাহলে
পাহারা স্বয়ংক্রিয়ভাবে দ্বারা সম্পন্ন করা হয় metaconfig নিজেই।

?এইচ:#$d_var VAR "$var"
শর্তসাপেক্ষে সংজ্ঞায়িত করে VAR C চিহ্নের মধ্যে $var কখন সেট করা হয়'নির্ধারণ করা' বোঝায় a
'?VAR:' প্রহরী অবস্থা, এবং metaconfig স্বয়ংক্রিয়ভাবে লিঙ্ক VAR এর দুটি শেল পর্যন্ত
পরিবর্তনশীল নির্ভরতা (যেমন উভয় $d_var এবং $var হিসাবে পতাকাঙ্কিত করা হবে চেয়েছিলেন if VAR is
C সূত্রে ব্যবহৃত হয়)।

?H:#সংজ্ঞায়িত করুন VAR [ঐচ্ছিক পাঠ]
সর্বদা সংজ্ঞায়িত করে VAR কিছু মান সি চিহ্ন. বোঝায় একটি '?VAR:' প্রহরী অবস্থা।
একটি স্বয়ংক্রিয় শেল নির্ভরতা ইউনিট নিজেই তৈরি করা হয়.

?H:#সংজ্ঞায়িত করুন VAR(x,y,z) $var
সর্বদা ম্যাক্রো সংজ্ঞায়িত করে VAR এর মান হতে $var পরিবর্তনশীল এটা আপ
নিশ্চিত করতে ইউনিট $var একটি সংবেদনশীল মান ধারণ করে। সি এর মধ্যে একটি স্বয়ংক্রিয় নির্ভরতা
ম্যাক্রো VAR এবং শেল ভেরিয়েবল প্রতিষ্ঠিত হয়, এবং পুরো লাইনটি একটি দ্বারা সুরক্ষিত থাকে
অন্তর্নিহিত '?VAR:'

?এইচ:#$d_var VAR
শর্তসাপেক্ষে সংজ্ঞায়িত করে VAR if $d_var তৈরি 'নির্ধারণ করা' বোঝায় একটি '?VAR:' পাহারা দিচ্ছে
অবস্থা দিকে একটি স্বয়ংক্রিয় শেল নির্ভরতা তৈরি হয় $d_war.

?H:#সংজ্ঞায়িত করুন VAR "$var"
একটি কনফিগার করা মান বরাদ্দ করে VAR সি প্রতীক। বোঝায় একটি '?VAR:' কঠিন শর্ত।
লিঙ্ক করার জন্য একটি স্বয়ংক্রিয় শেল নির্ভরতা তৈরি হয় VAR এবং $var.

?এইচ:। বন্ধ করে দেয় config_h.SH অন্তর্ভুক্তির অনুরোধ।

?এম:C প্রতীক: C নির্ভরতা
C চিহ্ন সংক্রান্ত জাদু সংজ্ঞা প্রবর্তন, জন্য confmagic.h, এবং সংজ্ঞায়িত করে
বাকী?এম: সংজ্ঞার জন্য পাহারাদার প্রতীক। এই লাইনটি নিঃশব্দে বোঝায়
'?W:%<:C প্রতীক', অর্থাৎ C প্রতীক উপস্থিত হলে ইউনিটটি কনফিগারে লোড হবে
সি উৎসের মধ্যে, যাদু ব্যবহার করা হয় কি না। সি নির্ভরতা সক্রিয় করা হয়
যখন জাদু ব্যবহার করা হয়, যাতে তাদের সংজ্ঞা জোর করে config_h.SH। তবে, যদি
যাদু হল না ব্যবহৃত কিন্তু C চিহ্নটি উৎসে প্রয়োজনীয় C ছাড়াই উপস্থিত হয়
নির্ভরতা, যখনই ওয়ান্টেড ফাইল তৈরি করা হয় তখন আপনাকে সতর্ক করা হবে, যেহেতু এটি হতে পারে
একটি পোর্টেবিলিটি সমস্যা (এবং কারণ ইউনিটটি নিঃশর্তভাবে লোড করা হয়েছে
যখনই C চিহ্ন ব্যবহার করা হয় তখনই কনফিগার করুন, নির্বিশেষে অন্যান্য ? C: থেকে লাইন
ইউনিট)।

?এম:CPP defs
confmagic.h-এ প্রবর্তন করা ম্যাজিক সিপিপি ম্যাপিং সংজ্ঞায়িত করে যখনই সংশ্লিষ্ট
প্রতীক ব্যবহার করা হয়। একটি অন্তর্নিহিত আছে '?সিম' কোথায় পাহারা দিচ্ছে সিম প্রতীকের নাম
নেতৃস্থানীয় দ্বারা সংজ্ঞায়িত? এম: লাইন.

?এম:. বন্ধ করে দেয় confmagic.h অন্তর্ভুক্তির অনুরোধ।

?W:খোল প্রতীক তালিকা:C প্রতীক তালিকা
শেল চিহ্নের নিয়তিকে সি চিহ্নের সাথে বেঁধে দেয়: যদি কোনটি সি
তালিকাভুক্ত চিহ্ন ওয়ান্টেড, তারপর সমস্ত শেল চিহ্ন ওয়ান্টেড হিসাবে চিহ্নিত করা হয়। কাজে লাগে
একটি ইউনিটের জোর করে অন্তর্ভুক্তি (শেল প্রতীক তালিকা '%<' সেট করা হয়েছে) যখন কিছু C উপস্থিতি
প্রতীক সনাক্ত করা হয়। পাশ থেকে লাভবান হওয়ার জন্য শেল প্রতীক তালিকাটি খালি রাখা হতে পারে
বিল্টইন প্রি-প্রসেসরের মধ্যে সি চিহ্নের অবস্থানের প্রভাব (প্রতীক হচ্ছে সংজ্ঞায়িত
উৎসে অবস্থিত হলে সেই প্রাক-প্রসেসরের জন্য)। একটি স্থান সঙ্গে নিদর্শন জন্য সন্ধান করুন
তাদের মধ্যে, আপনাকে 'struct-এর মতো সাধারণ উদ্ধৃতিগুলির মধ্যে C চিহ্নগুলি উদ্ধৃত করতে হবে
সময় অঞ্চল'.

?ভি:শুধুমাত্র পাঠযোগ্য প্রতীক:পড়ুন-লিখুন প্রতীক
এটা একটা ধাতব পদার্থ ইঙ্গিত এবং শুধুমাত্র কিছু শেল রপ্তানিকারী বিশেষ ইউনিটগুলিতে ব্যবহার করা উচিত
ভেরিয়েবল মধ্যম ':'-এর আগে ভেরিয়েবলগুলি শুধুমাত্র পঠনযোগ্য রপ্তানি করা হয় (তাদের পরিবর্তন করা হচ্ছে
একটি সতর্কতা জারি করবে), যখন অন্যান্য চিহ্ন অবাধে পড়া এবং পরিবর্তন করা যেতে পারে।

?চ:নথি পত্র নির্মিত
এই লাইন দুটি উদ্দেশ্য পরিবেশন করে: এটি একটি ধাতব পদার্থ ইঙ্গিত, এবং এর জন্য একটি স্থানধারক
ভবিষ্যৎ jmake ব্যবহার এটি অবশ্যই তিনটি ধরণের ফাইল তালিকাভুক্ত করবে: অস্থায়ী একটি যা
একটি পরীক্ষার জন্য তৈরি করা হয়েছে, ব্যক্তিগত UUগুলি পরবর্তীতে UU ডিরেক্টরিতে তৈরি করা হয়েছে
perusal, এবং প্যাকেজের রুট ডিরেক্টরিতে থাকা পাবলিকগুলি। অস্থায়ী
ফাইলগুলি অবশ্যই একটি পূর্ববর্তী '!' সহ তালিকাভুক্ত করা উচিত চরিত্র (অর্থাৎ "না! তারা পুনরায় ব্যবহার করা হয় না
পরবর্তীতে!"), ব্যক্তিগত UU ফাইলের আগে একটি './' (অর্থ: সেগুলি ব্যবহার করতে, বলুন
./ফাইল, শুধুই না ফাইল), এবং সর্বজনীনের নাম দেওয়া উচিত যেমন- আছে৷

?টি:খোল অস্থায়ী
অন্য ধাতব পদার্থ ইঙ্গিত এই লাইনটি অস্থায়ী হিসাবে ব্যবহৃত সমস্ত শেল ভেরিয়েবলের তালিকা করে
এই ইউনিটের শেল বিভাগের মধ্যে।

?D:প্রতীক='মূল্য'
শর্তসাপেক্ষ নির্ভরতা হিসাবে ব্যবহৃত প্রতীকগুলির জন্য প্রারম্ভিক মান। যদি না হয়? D: লাইন হয়
পাওয়া যায়, তারপর একটি নাল মান পরিবর্তে ব্যবহার করা হয়। দ্য ধাতব পদার্থ প্রোগ্রাম আপনাকে সতর্ক করবে যদি একটি
চিহ্নটি শর্তসাপেক্ষ নির্ভরতা হিসাবে অন্তত একবার ব্যবহার করা হয় এবং এর যথাযথ নেই
ডি: আরম্ভ। এমনকি একটি নাল জন্য এই লাইন যোগ করার জন্য এটি একটি ভাল অভ্যাস
প্রারম্ভিকতা যেহেতু এটি একটি প্রতীকের সম্ভাব্য ঐচ্ছিক প্রকৃতির উপর জোর দেয়।

?ও:কোন বার্তা আপনি প্রয়োজন
এই নির্দেশটি নির্দেশ করে যে এই ইউনিটটি সম্পূর্ণরূপে অপ্রচলিত। যখনই কোন ব্যবহার
এর প্রতীকগুলি তৈরি করা হয় (বা নির্ভরতার মাধ্যমে পরোক্ষ ব্যবহার), বার্তাটি আউটপুট চালু হয়
পর্দা (stderr এ)। আপনি এক আকরিক আরো লাইন রাখতে পারেন, এই ক্ষেত্রে প্রতিটি লাইন হবে
প্রিন্ট করা, ক্রমানুসারে।

লিন্ট:ধাতব পদার্থ নির্দেশ
দেখ ধাতব পদার্থ স্বতন্ত্র ইঙ্গিতগুলির ব্যাখ্যার জন্য ম্যানুয়াল পৃষ্ঠা যা হতে পারে
ব্যবহার করা হয়েছে।

?এটা:আরম্ভ কোড
এই লাইন দ্বারা নির্দিষ্ট করা শুরু করার কোডটি উপরের দিকে লোড করা হবে
কনফিগার করুন ইউনিট প্রয়োজন হলে স্ক্রিপ্ট.

C প্রতীক এলিয়াসিং
অনেক সময় ভরসা করা যায় না metaconfigএর জন্য নিজস্ব ডিফল্ট নির্বাচন config_h.SH
মন্তব্য এবং সি প্রতীক সংজ্ঞা। এখানেই অ্যালিয়াসিং খেলায় আসে। যেহেতু এটা বরং
ব্যাখ্যা করা কঠিন, আমরা অন্তর্নিহিত প্রক্রিয়াটি বোঝার জন্য একটি উদাহরণ অধ্যয়ন করব।

d_const.U ইউনিট আপনার সি কম্পাইলার সম্পর্কে জানে কি না তা নির্ধারণ করার চেষ্টা করে const
কীওয়ার্ড যদি এটা না হয় আমরা একটি নাল স্ট্রিং যে কিওয়ার্ড রিম্যাপ করতে চান, যাতে যাক
প্রোগ্রাম কম্পাইল। তাছাড়া, আমরা স্বয়ংক্রিয়ভাবে পরীক্ষা ট্রিগার করতে চাই যখন const শব্দ
ব্যবহৃত হয়.

এখানে d_const.U ইউনিটের প্রাসঙ্গিক অংশ রয়েছে:

?Make:d_const: cat cc ccflags Setvar
?বানান: -$@ % যোগ করুন
?S:d_const:
?S: এই ভেরিয়েবল শর্তসাপেক্ষে HASCONST চিহ্নকে সংজ্ঞায়িত করে, যা
?S: C প্রোগ্রামকে নির্দেশ করে যে এই C কম্পাইলার সম্পর্কে জানেন
এস: const টাইপ।
?এস:।
?C:HASCONST ~ %<:
?C: এই চিহ্ন, যদি সংজ্ঞায়িত করা হয়, নির্দেশ করে যে এই C কম্পাইলার সম্পর্কে জানেন
?C: const টাইপ। সেই চিহ্নের জন্য আসলে পরীক্ষা করার দরকার নেই
?C: আপনার প্রোগ্রামের মধ্যে. নিছক "const" কীওয়ার্ড ব্যবহার করবে
?C: প্রয়োজনীয় পরীক্ষা ট্রিগার করুন।
?গ:।
?H:?%<:#$d_const HASCONST /**/
?H:?%<:#ifndef HASCONST
?H:?%<:# সংজ্ঞায়িত করুন
?H:?%<:#endif
?এইচ:।
?W:%<:const
?লিন্ট: সেট d_const
?লিন্ট:পরিচিত কনস্ট
: const কীওয়ার্ড পরীক্ষা করুন
প্রতিধ্বনি ""
echo 'আপনার C কম্পাইলার "const"...' >&4 সম্পর্কে জানে কিনা তা পরীক্ষা করা হচ্ছে
/বিন/বিড়াল >const.c <<'EOCP'
প্রধান ()
{
const char *foo;
}
ইওসিপি
যদি $cc -c $ccflags const.c >/dev/null 2>&1 ; তারপর
val="$define"
প্রতিধ্বনি "হ্যাঁ, এটা করে।"
আর
val="$undef"
প্রতিধ্বনি "না, এটা হয় না।"
fi
d_const সেট করুন
eval $setvar

প্রথমে আমরা একটি ?W: লাইনের ব্যবহার লক্ষ্য করি, যা মূলত বলে: "এই এককটি যখন চায় তখন
const একটি সি ফাইলে কীওয়ার্ড ব্যবহার করা হয়।"। শর্তসাপেক্ষে রিম্যাপ করার জন্য const একটি শূন্য থেকে
স্ট্রিং ইন config.h, আমি শর্তসাপেক্ষে সংজ্ঞায়িত করতে বেছে নিয়েছি হ্যাসকনস্ট মাধ্যমে $d_const.

যাইহোক, এটি একটি সমস্যা উত্থাপন করে, কারণ হ্যাসকনস্ট প্রতীক ব্যবহার করা যাচ্ছে না
সূত্র, শুধুমাত্র const টোকেন হল। এবং? H: লাইন সংজ্ঞায়িত হ্যাসকনস্ট পরোক্ষভাবে হয়
'?HASCONST' দ্বারা সুরক্ষিত। অতএব, আমাদের অবশ্যই স্পষ্ট '?%<' সীমাবদ্ধতা যোগ করতে হবে
metaconfig যে লাইনগুলি অন্তর্ভুক্ত করা উচিত config_h.SH যখনই '%<' চিহ্ন
gets want (%< এখানে ইউনিটের নাম বোঝায় d_const).

এটা প্রায় নিখুঁত, কারণ ?W: লাইন চাইবে d_const যখনই const তারপর ব্যবহার করা হয়
?H: লাইন অন্তর্ভুক্ত করা হবে config_h.SH ফাইল যাইহোক, নেতৃস্থানীয় মন্তব্য (? C:
লাইন) সংযুক্ত হ্যাসকনস্ট নিজেও এর মাধ্যমে সুরক্ষিত হ্যাসকনস্ট, অর্থাৎ এর একটি অন্তর্নিহিত আছে
'?HASCONST' সীমাবদ্ধতা। তাই জন্য প্রয়োজন এলিয়াসিং দ্য হ্যাসকনস্ট '%<'-এর প্রতীক।

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

করা কমান্ড
?MAKE: কমান্ড লাইনে, আপনি একটি শেল কমান্ড লিখতে পারেন যা যেমন আছে বা a হিসাবে চালানো হবে
প্রশিক্ষণ - বাছাই কমান্ড যা দ্বারা আটকা পড়ে metaconfig এবং কি হওয়া উচিত তা দেখতে পার্স করা হয়েছে
সম্পন্ন. অগ্রণী '-' শুধুমাত্র প্রতিরোধ করার জন্য আছে করা কমান্ড ফিরে আসার সময় ব্যর্থ হওয়া থেকে
একটি নন-জিরো স্ট্যাটাস -- যেহেতু আমরা 'ব্যবহার করি তাই এটির আসলেই প্রয়োজন নেইকরা -n' সমাধান করতে
নির্ভরতা, কিন্তু ভবিষ্যতের সংস্করণে এটি বাধ্যতামূলক হয়ে গেলে আমি আপনাকে এটি রাখার পরামর্শ দিচ্ছি।
এর সিনট্যাক্স বাছাই কমান্ড হল:

- বাছাই cmd কমান্ড $@ টার্গেট_ফাইল

কোথায় $@ বর্তমান টার্গেট (নাম
ইউনিট নির্মাণ করা হচ্ছে, চূড়ান্ত .U এক্সটেনশন ছিনতাই সহ)। দ্য cmd কমান্ড অংশ হল
আসল metaconfig চালানোর নির্দেশ, এবং টার্গেট_ফাইল এখনও অন্য প্যারামিটার, যার
ব্যাখ্যা নির্ভর করে cmd কমান্ড নিজেই এছাড়াও এটির চূড়ান্ত .U এক্সটেনশন ছিনতাই করা হয়েছে এবং
সাধারণত একটি ইউনিট ফাইলকে বোঝায়, যদি না এটি './' দিয়ে শুরু হয় যে ক্ষেত্রে এটি একটি উল্লেখ করে
এর metaconfig 'এ ফাইল নিয়ন্ত্রণ করুন.MT ডিরেক্টরি.

উপলব্ধ কমান্ড হল:

যোগ যোগ করে টার্গেট_ফাইল থেকে কনফিগার করুন.

add.Config_sh
এর অংশ পূরণ করে কনফিগার করুন উত্পাদন config.sh ফাইল শুধুমাত্র ব্যবহার করা হয়
ভেরিয়েবল যোগ করা হয়, শর্তাধীন বেশী (শর্ত নির্ভরতা থেকে) হয়
বাদ পড়ে

add.Null একটি খালি স্ট্রিং-এ ব্যবহৃত সমস্ত শেল ভেরিয়েবল শুরু করার বিভাগ যোগ করে।

c_h_weed উৎপন্ন করে config_h.SH ফাইল শুধুমাত্র প্রয়োজনীয় লাইন মুদ্রিত হয়.

cm_h_weed উৎপন্ন করে confmagic.h ফাইল শুধুমাত্র প্রয়োজনীয় লাইন মুদ্রিত হয়. এই
কমান্ড শুধুমাত্র সক্রিয় করা হয় যখন -M সুইচ দেওয়া হয়, বা যখন ক confmagic.h ফাইল
আগে থেকেই আছে.

বন্ধ করুন. কনফিগ_শ
এখানে ডকুমেন্ট শেষ করতে একটি লাইনে চূড়ান্ত 'EOT' প্রতীক যোগ করে
উত্পাদন নির্মাণ config.sh ফাইল.

prepend টার্গেটের বিষয়বস্তুকে অগ্রিম করে টার্গেট_ফাইল যদি ফাইলটি খালি না হয়।

আগাছা একক যোগ করে কনফিগার করুন মত যোগ কমান্ড, কিন্তু কিছু অতিরিক্ত পরীক্ষা করুন
অপসারণ করতে '?প্রতীক' এবং '%প্রতীক' থেকে লাইন টার্গেট_ফাইল যদি প্রতীক
কাঙ্ক্ষিত বা শর্তসাপেক্ষে চাওয়া হয় না। '%' ফর্মটি শুধুমাত্র অভ্যন্তরীণভাবে ব্যবহার করা হয়
metaconfig এর নিজস্ব .U ফাইল তৈরি করার সময় '.MT' ডিরেক্টরি।

হিসাবে একই মুছা যোগ সত্যিই, কিন্তু একটি অতিরিক্ত ম্যাক্রো প্রতিস্থাপন করে। দ্য
উপলব্ধ ম্যাক্রো বর্ণনা করা হয় hardwired ম্যাক্রো অনুচ্ছেদ।

পার্শ্ব নোট হিসাবে, metaconfig উত্পন্ন একটি -কন্ড শর্তসাপেক্ষে মোকাবেলা করার জন্য অভ্যন্তরীণভাবে নির্দেশ করুন
নির্ভরতা আপনি নিজে এটি ব্যবহার করবেন না, তবে স্ক্যান করলে আপনি এটি দেখতে পাবেন
উত্পন্ন Makefile নামক মধ্যে .MT ডিরেক্টরি.

hardwired ম্যাক্রো
নিম্নলিখিত ম্যাক্রো দ্বারা স্বীকৃত হয় মুছা অন্তর্ভুক্ত করার আগে কমান্ড এবং প্রতিস্থাপিত
কনফিগার করুন:

প্যাকেজের বেস রিভিশন নম্বর, থেকে প্রাপ্ত .প্যাকেজ.

বর্তমান তারিখ।


এই প্যাকেজের রক্ষণাবেক্ষণকারীর ই-মেইল ঠিকানা, আপনার থেকে প্রাপ্ত
.প্যাকেজ.


আপনার থেকে উদ্ভূত প্যাকেজের নাম .প্যাকেজ ফাইল.


এর প্যাচ স্তর metaconfig প্রোগ্রাম (এর পক্ষে বঞ্চিত )


এর SVN সংশোধন স্তর metaconfig প্রোগ্রাম.

সংস্করণ সংখ্যা metaconfig প্রোগ্রাম.

যারা ম্যাক্রো প্রধানত চিহ্নিত করতে ব্যবহৃত হয় metaconfig একটি উত্পন্ন সংস্করণ
বিশেষ কনফিগার করুন স্ক্রিপ্ট এবং কোন প্যাকেজের জন্য এটি করা হয়েছিল। এর ই-মেইল ঠিকানা
রক্ষণাবেক্ষণকারী নেতৃস্থানীয় নির্দেশাবলী যে hardwired হয় কনফিগার করুন শুরু করার সময় প্রিন্ট করে।

সাম্প্রতিক metaconfig সংস্করণগুলি ফর্মটির আরও সাধারণ সিনট্যাক্স বোঝে:

<$ পরিবর্তনশীল>

যা কনফিগার-জেনারেশন সময়ে এর মান দ্বারা প্রতিস্থাপিত হয় পরিবর্তনশীল আপনার কাছ থেকে নেওয়া
.প্যাকেজ ফাইল অবশেষে, পুরানো হার্ডওয়্যারযুক্ত ম্যাক্রো বিন্যাস অদৃশ্য হয়ে যাবে, এবং <$baserev>
পরিবর্তন করবে সমস্ত সরবরাহ ইউনিটে।

বিশেষ ইউনিট
নিম্নলিখিত বিশেষ ইউনিটগুলি কোড ফ্যাক্টরাইজ করতে এবং উচ্চ স্তর প্রদান করতে ব্যবহৃত হয়
কার্যকারিতা তারা হয় একটি শেল স্ক্রিপ্ট তৈরি করে যা উৎস হতে পারে বা একটি শেল
পরিবর্তনশীল যে হতে পারে স্পষ্ট'ed. প্যারামিটার পাসিং ভাল-জানা ভেরিয়েবলের মাধ্যমে করা হয়, হয়
নাম বা বেনামী যেমন $1, $2, ইত্যাদি... (যা সহজেই শেলের মাধ্যমে সেট করা যায় সেট
অপারেটর). কখন কনফিগার করুন executes, এটি তৈরি করে এবং a এ যায় UU ডিরেক্টরি, তাই প্রতিটি
উত্পাদিত স্ক্রিপ্ট সেখানে থাকে এবং আপনার প্যাকেজ থেকে ফাইলগুলির সাথে হস্তক্ষেপ করে না।

এখানে সেপসিয়াল ইউনিট রয়েছে যেগুলি সম্পর্কে আপনার জানা উচিত এবং সেগুলি ব্যবহার করার উপায়।

Cppsym.U
এই ইউনিট একটি শেল স্ক্রিপ্ট নামক উত্পাদন করে সিপিসিএম, যা নির্ধারণ করতে ব্যবহার করা যেতে পারে
আপনার কাছে থাকা সি প্রিপ্রসেসর বা সি কম্পাইলার দ্বারা তালিকার কোনো চিহ্ন সংজ্ঞায়িত করা হয়েছে কিনা
নির্দিষ্ট করা এটি যেকোনো প্রতীকের স্থিতি নির্ধারণ করতে পারে, যদিও এর মধ্যে চিহ্ন
(অ্যাট্রিবিউট তালিকা) আরো সহজে নির্ধারিত হয়।

Csym.U
এটি $csym শেল ভেরিয়েবল সেট করে, যার দ্বারা অভ্যন্তরীণভাবে ব্যবহৃত হয় কনফিগার করুন একটি কিনা পরীক্ষা করতে
প্রদত্ত সি চিহ্ন সংজ্ঞায়িত বা না। একটি সাধারণ ব্যবহার হল:

প্রতীক ফলাফল সেট করুন [-fva] [আগের]
eval $csym

যে সেট করবে ফল ভেরিয়েবল থেকে 'সত্য' যদি ফাংশন [-f], ভেরিয়েবল [-v] বা
array [-a] সংজ্ঞায়িত করা হয়, অন্যথায় 'false'। যদি একটি পূর্ববর্তী মান দেওয়া হয় এবং -r
সুইচ প্রদান করা হয়েছে কনফিগার করুন (দেখুন কনফিগার করুন অপশন সমূহ অনুচ্ছেদ), তারপর যে
প্রশ্ন ছাড়াই মান পুনরায় ব্যবহার করা হয়।

এই গণনাটি যেভাবে করা হয় তা ব্যবহারকারী প্রশ্নের উত্তরের উপর নির্ভর করে
কনফিগার করুন এটা একটি সঞ্চালন করা উচিত কিনা সম্পর্কে জিজ্ঞাসা করবে nm নিষ্কাশন বা না। যদি
নিষ্কাশন সঞ্চালিত হয়েছিল, ইউনিটটি কেবল প্রতীক তালিকার মাধ্যমে দেখায়, অন্যথায়
এটি একটি কম্পাইল-লিঙ্ক পরীক্ষা করে, যদি না -r পূর্বে গণনা করা পুনরায় ব্যবহার করার জন্য দেওয়া হয়েছিল
মান, স্বাভাবিকভাবেই...

End.U
আপনার ব্যক্তিগত এই ইউনিট অনুলিপি দ্বারা U ডিরেক্টরি এবং সংযুক্ত নির্ভরতা
তৈরি করুন: লাইন, আপনি একটি প্রদত্ত ইউনিটকে লোড করতে বাধ্য করতে পারেন কনফিগার করুন এমনকি যদি তা না হয়
অন্যথায় চেয়েছিলেন। কিছু ইউনিট শুধুমাত্র বাধ্য করা হতে পারে কনফিগার করুন ঐ দিকে.

ফাইলেক্স.ইউ
এই ইউনিটটি একটি শেল স্ক্রিপ্ট তৈরি করে ফাইলেক্স যা দিয়ে শুরু করে ফাইলের নাম প্রসারিত হবে
টিল্ডস একটি সাধারণ ব্যবহার হল:

exp_name=`./filexp $name`

প্রসারিত ফাইলের নাম বরাদ্দ করতে exp_name.

Findhdr.U
এই ইউনিট একটি উত্পাদন করে findhdr স্ক্রিপ্ট যা হেডার ফাইলগুলি সনাক্ত করতে ব্যবহৃত হয়
$usrinc বা অন্যান্য অপরিচিত জায়গা cpp ক্ষমতা ব্যবহার করে। স্ক্রিপ্ট একটি দেওয়া হয়
'stdio.h' বা 'sys/file.h' এর মতো ফাইলের বেস নাম অন্তর্ভুক্ত করুন এবং এটি এর সম্পূর্ণ পথ ফেরত দেয়
inlcude ফাইল এবং একটি শূন্য স্থিতি পাওয়া গেলে, অথবা একটি খালি স্ট্রিং এবং একটি অ-শূন্য স্থিতি
যদি ফাইলটি সনাক্ত করা যায় না।

Getfile.U
এই ইউনিটটি কিছু শেল কোড তৈরি করে যা একটি ফাইল পেতে অবশ্যই উৎস হতে হবে
নাম এবং কিছু বিজ্ঞতা পরীক্ষা করা. ঐচ্ছিকভাবে, একটি ~নাম সম্প্রসারণ করা হয়।

এই ইউনিট ব্যবহার করতে, $আরপি এবং $dflt প্রশ্ন এবং ডিফল্ট উত্তর ধরে রাখতে হবে, যা
হিসাবে পাস করা হবে আমার পড়া স্ক্রিপ্ট (আসন্ন দেখুন Myread.U)। দ্য $fn
পরিবর্তনশীল অপারেশন নিয়ন্ত্রণ করে এবং ফলাফল ফিরে আসে $ans.

একটি ফাইল বা ডিরেক্টরি সনাক্ত করতে, 'f' বা 'd' লিখুন চ~/. যদি একটি '~' উপস্থিত হয়, তাহলে ~নাম
প্রতিস্থাপন অনুমোদিত। যদি একটি '/' উপস্থিত হয়, শুধুমাত্র পরম পাথনাম গৃহীত হয় এবং
~নাম সাবসিটিউশনগুলি সর্বদা প্রত্যাবর্তনের আগে প্রসারিত হয়৷ যদি '+' নির্দিষ্ট করা হয়,
অস্তিত্ব চেক বাদ দেওয়া হয়. যদি 'n' এর মধ্যে উপস্থিত হয় $fn, তারপর ব্যবহারকারীকে অনুমতি দেওয়া হয়
উত্তর 'কোনটি নয়'।

সাধারণত, আপনি পোর্টেবিলিটির জন্য জিজ্ঞাসা না করলে, অনুরোধ করা হলে নাম প্রতিস্থাপন ঘটে।
যাইহোক, কিছু সময় আছে আপনি পোর্টেবিলিটি বাইপাস করতে চান এবং জোর করতে চান
প্রতিস্থাপন আপনি এটি করতে 'e' অক্ষর (প্রসারিত) ব্যবহার করতে পারেন।

যদি বিশেষ 'l' (লোকেট) টাইপ ব্যবহার করা হয়, তাহলে $fn পরিবর্তনশীল একটি ':' দিয়ে শেষ হওয়া আবশ্যক,
একটি ফাইলের বেসনাম দ্বারা অনুসরণ করা হয়। উত্তর একটি ডিরেক্টরি হলে, ফাইলের বেসনেম হবে
ফাইলের অস্তিত্ব পরীক্ষা করার আগে যুক্ত করা হয়েছে। এটি লোকেট-স্টাইল প্রশ্নে দরকারী
এটার মত:

dflt='~সংবাদ/lib'
: যখন 'l' ব্যবহার করা হয় তখন 'd' বা 'f' নির্দিষ্ট করার দরকার নেই
fn='l~:সক্রিয়'
rp='সক্রিয় ফাইলটি কোথায়?'
. ./নথিভুক্ত কর
সক্রিয়="$ans"

উপরন্তু, 'p' (পথ) অক্ষরটি বলার জন্য 'l' এর সাথে ব্যবহার করা যেতে পারে
নথিভুক্ত কর এটিতে '/' ছাড়া একটি উত্তর গ্রহণ করা উচিত, অনুমান করে যে এটি হবে
এই মান প্রয়োজন হবে সময়ে প্রত্যেকের PATH মধ্যে থাকুন.

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

dflt='/বিন/ইনস্টল'
fn='/fe~(install,./install)'
rp='কোন ইন্সটল প্রোগ্রাম ব্যবহার করবেন?'
. ./নথিভুক্ত কর
ইনস্টল করুন="$ans"

ব্যবহারকারীকে শুধুমাত্র বিদ্যমান ফাইলগুলি উল্লেখ করে সম্পূর্ণ যোগ্য পাথ নির্দিষ্ট করতে দেবে,
কিন্তু তারপরও বিশেষ "ইনস্টল" এবং "./ইনস্টল" উত্তরগুলিকে যেমন- আছে (অনুমান করে) অনুমতি দিন
অবশ্যই কিছু তাদের সাথে বিশেষভাবে পরে চেইনে মোকাবেলা করবে যেহেতু তারা করে
সাধারণ প্রত্যাশিত ফ্রেমের সাথে সামঞ্জস্যপূর্ণ নয়)।

যদি প্রশ্নের উত্তর 'কোনটি নয়' হয়, তাহলে অস্তিত্ব চেকগুলি এড়িয়ে যায় এবং
খালি স্ট্রিং ফেরত দেওয়া হয়। নোট করুন যে থেকে নথিভুক্ত কর কল আমার পড়া অভ্যন্তরীণভাবে, সব
সঙ্গে উপলব্ধ বৈশিষ্ট্য আমার পড়া এখানে আবেদন করুন।

যদি একটি সম্পূর্ণ প্রসারিত মান প্রয়োজন হয় (উদাহরণস্বরূপ একটি মেকফাইলে), আপনি ব্যবহার করতে পারেন
দ্য $ansexp পরিবর্তনশীল যা সবসময় দ্বারা সঠিকভাবে সেট আপ করা হয় নথিভুক্ত কর প্রসারিত হিসাবে
সংস্করণ $ans. অবশ্যই, এটি ~নাম প্রসারিত হবে না যদি আপনি এটিতে অনুমতি না দেন৷
মধ্যে প্রথম স্থান $fn পরিবর্তনশীল।

Inhdr.U
এই ইউনিট উত্পাদন করে $inhdr শেল পরিবর্তনশীল, দ্বারা অভ্যন্তরীণভাবে ব্যবহৃত কনফিগার করুন চেক করতে
হেডারের একটি সেট বিদ্যমান কিনা। একটি সাধারণ ব্যবহার হল:

হেডার i_header সেট করুন [ header2 i_header2 ... ]
eval $inhdr

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

Inlibc.U
এই ইউনিট উত্পাদন করে $inlibc শেল পরিবর্তনশীল, দ্বারা অভ্যন্তরীণভাবে ব্যবহৃত কনফিগার করুন চেক করতে
একটি প্রদত্ত সি ফাংশন সংজ্ঞায়িত বা না। একটি সাধারণ ব্যবহার হল:

ফাংশন d_func সেট করুন
eval $inlibc

এটি একটি বার্তা প্রিন্ট করবে, ফাংশনটি পাওয়া গেছে কিনা এবং সেট করা হয়েছে কিনা
$d_func সেই অনুযায়ী অভ্যন্তরীণভাবে, এটি ব্যবহার করে $csym রুটিন।

Loc.U
এই গুরুত্বপূর্ণ ইউনিটটি একটি শেল স্ক্রিপ্ট তৈরি করে এলওসি যা কোথায় খুঁজে বের করতে ব্যবহার করা যেতে পারে
ডিরেক্টরির তালিকায় একটি প্রদত্ত ফাইল মিথ্যা। প্রথম আর্গুমেন্ট ফাইলটি নির্দিষ্ট করে
অবস্থিত হতে হবে, দ্বিতীয় যুক্তি হল অনুসন্ধান ব্যর্থ হলে কি ফেরত দেওয়া হবে, এবং
রিমিনিং আর্গুমেন্ট হল ডিরেক্টরিগুলির একটি তালিকা যেখানে ফাইলটি অনুসন্ধান করা হবে। জন্য
দৃষ্টান্ত:

dflt=`./loc sendmail.cf এক্স / Usr / lib /var/lib/sendmail / lib`

সেট করবে $dflt থেকে X যদি না sendmail.cf ফাইল তালিকাভুক্ত ডিরেক্টরির অধীনে পাওয়া গেছে,
বা মত কিছু /usr/lib/sendmail.cf কিছু সিস্টেমে। আরো দেখুন Getfile.U.

MailAuthor.U
এই ইউনিটটি তৈরি করতে আপনার নিজের ব্যক্তিগত End.U এর ?MAKE: লাইনে অন্তর্ভুক্ত করতে হবে
এর মধ্যে কনফিগার করুন. এটি ব্যবহারকারীকে ঐচ্ছিকভাবে লেখকের কাছে নিজেকে নিবন্ধন করার প্রস্তাব দেয়
যখন নতুন প্যাচ আসে তখন অবহিত করা হয় বা জারি করার সময় স্বয়ংক্রিয়ভাবে সেগুলি গ্রহণ করে।
আপনার ইনস্টল করা দরকার মেইলজেন্ট এটি করতে (অন্তত সংস্করণ 3.0)।

MailList.U
এই ইউনিটটি তৈরি করতে আপনার নিজের ব্যক্তিগত End.U এর ?MAKE: লাইনে অন্তর্ভুক্ত করতে হবে
এর মধ্যে কনফিগার করুন. এটি ব্যবহারকারীকে একটি মেলিং তালিকায় সদস্যতা বা সদস্যতা ত্যাগ করার প্রস্তাব দেয়
যেখানে প্যাকেজ সংক্রান্ত আলোচনা হচ্ছে। আপনাকে দৌড়াতে হবে packinit
এবং আপনার সঠিক ভেরিয়েবল সেট আপ করতে মেইলিং তালিকা সম্পর্কিত প্রশ্নের উত্তর দিন
.প্যাকেজ এই ইউনিট চালু হওয়ার আগে।

Myinit.U
আপনার ব্যক্তিগত মধ্যে এই ইউনিট অনুলিপি U কিছুতে আপনার নিজস্ব ডিফল্ট মান যোগ করার জন্য ডিরেক্টরি
অভ্যন্তরীণ ভেরিয়েবল। এই ইউনিট লোড করা হয় কনফিগার করুন সব ডিফল্ট পরে
প্রাথমিককরণ করা হয়েছে।

Myread.U
এই ইউনিট উত্পাদন করে আমার পড়া শেল স্ক্রিপ্ট যা একটি করার জন্য উৎস হতে হবে
পড়া এটি শেল এস্কেপ, ডিফল্ট অ্যাসাইনমেন্ট এবং প্যারামিটার মূল্যায়নের অনুমতি দেয়
Instruct.U ইউনিটে নথিভুক্ত। এটি গতিশীল সেটিং অনুমতি দেয় -d বিকল্প,
যা বাকি স্ক্রিপ্ট এক্সিকিউশনের জন্য ব্যবহার করা হবে।

এই ইউনিট ব্যবহার করতে, $আরপি প্রশ্ন রাখা আবশ্যক এবং $dflt ডিফল্ট থাকা উচিত
উত্তর. প্রশ্নটি স্ক্রিপ্ট দ্বারা মুদ্রিত হবে এবং ফলাফলটি ফিরে আসবে
মধ্যে $ans পরিবর্তনশীল।

এখানে একটি সাধারণ ব্যবহার আছে:

dflt='y'
rp='প্রশ্ন?'
. ./myread
মান="$ans"

আরও তথ্যের জন্য ইউনিট নিজেই দেখুন.

Oldconfig.U
এই ইউনিটটি অবশ্যই আপনার নির্ভরতার অংশ হতে হবে? তৈরি করুন: লাইন যখন আপনার কিছু ইউনিট চেষ্টা করে
একটি পুরানো প্রতীক মান পুনরায় ব্যবহার করতে। এই ইউনিট পুরানো উত্তর পাওয়ার জন্য দায়ী
থেকে config.sh অথবা একটি প্রদত্ত প্ল্যাটফর্মে চলার সময় দরকারী ইঙ্গিত প্রদান করে
প্রথমবার. দেখুন কনফিগার করুন সংকেতগুলি ইঙ্গিত সম্পর্কে আরো তথ্যের জন্য অনুচ্ছেদ.

উপসর্গ.ইউ
এই ইউনিটের উদ্দেশ্য হল ইনস্টলেশন প্রিফিক্স ডিরেক্টরিতে পরিবর্তন সনাক্ত করা
পূর্ববর্তী উত্তর থেকে স্বয়ংক্রিয়ভাবে উপযুক্ত ডিফল্ট পুনরায় গণনা করুন। এটা উপর নির্ভর করে
মান $oldprefix পরিবর্তনশীল যা পূর্ববর্তী উপসর্গ ডিরেক্টরি ধারণ করে যখন এটি
পরিবর্তিত, এবং অন্যথায় খালি। উদাহরণস্বরূপ, যদি উপসর্গ থেকে পরিবর্তন করা হয় / অপ্ট থেকে
, / Usr / স্থানীয়, তাহলে পূর্ববর্তী বাইনারি ইনস্টলেশন ডিরেক্টরি থেকে পরিবর্তন করা হবে
/opt/bin থেকে , / Usr / স্থানীয় / বিন, অথবা অপরিবর্তিত থাকবে যদি এটি ছিল, বলুন, / বিন.

আপনাকে কল করতে হবে সেট একটি জারি করার আগে স্পষ্ট on $prefixit, যেমন:

সেট dflt var [dir]
eval $prefixit

যা সেট করবে $dflt থেকে $var or $prefix/dir উপসর্গ রয়ে গেছে কিনা তার উপর নির্ভর করে
একই বা না। যদি Dir স্ট্রিং হয় না, মধ্যে একটি একক স্থান মান $dflt হিসাবে রাখা হয়-
হয়, এমনকি যখন উপসর্গ পরিবর্তিত হয়। যদি Dir বাদ দেওয়া হয়, তারপর $dflt একটি খালি সেট করা হয়
স্ট্রিং যদি উপসর্গ পরিবর্তিত হয়, থেকে $var অন্যথায়।

উপসর্গ.ইউ
এই ইউনিটের উদ্দেশ্য Prefixit.U এর মতই, অর্থাৎ এটি ঠিক করতে সাহায্য করে
উপসর্গ পরিবর্তন মিটমাট করার জন্য ডিফল্ট স্ট্রিং। যাইহোক, শেল পরিবর্তনশীল $prefixup,
যখন মূল্যায়ন করা হয়, শুধুমাত্র ~নাম সম্প্রসারণ পুনরুদ্ধার করবে, উপসর্গ ব্যবহার করা উচিত এমন একটি পালানো
পদ্ধতি. এটি হিসাবে ব্যবহার করুন:

dflt সেট করুন
eval $prefixup

মাধ্যমে অনুরোধ করার আগে নথিভুক্ত কর এই ক্ষেত্রে. যদি উপসর্গ ~নাম ব্যবহার না করে
সম্প্রসারণ, তারপর উপরের একটি নো-অপ হবে y পরিবর্তনশীল, স্বাভাবিকভাবেই।

Typedef.U
এই ইউনিট উত্পাদন করে $typedef শেল পরিবর্তনশীল, দ্বারা অভ্যন্তরীণভাবে ব্যবহৃত কনফিগার করুন চেক করতে
একটি টাইপডেফ বিদ্যমান কিনা। একটি সাধারণ ব্যবহার হল:

সেট typedef val_t ডিফল্ট [ অন্তর্ভুক্ত ]
eval $typedef

এটি ভেরিয়েবল সেট করবে val_t এর মান পর্যন্ত ডিফল্ট যদি টাইপডেফ পাওয়া না যায়
তালিকাভুক্ত মধ্যে ফাইল অন্তর্ভুক্ত, বা টাইপডেফ যদি পাওয়া যায়. যদি কোন ফাইল অন্তর্ভুক্ত করা হয়
নির্দিষ্ট, ইউনিট দেখতে কেবল. আপনি যদি নির্দিষ্ট কিছু অন্তর্ভুক্ত, শুধুমাত্র
সেগুলো দেখা হয়।

ইউনিক্স.ইউ
এই ইউনিটের উদ্দেশ্য হল ভেরিয়েবলের মাধ্যমে কিছু সাধারণ UNIX-isms সংজ্ঞায়িত করা
যা কমান্ড লাইন থেকে বা সঠিক ইঙ্গিত ফাইলের মাধ্যমে পরিবর্তন করা যেতে পারে। নির্দিষ্টভাবে,
$_exe, $_o এবং $_a নির্ধারণ করা হয়. সমস্ত ইউনিট উল্লেখ করা উচিত $_o এবং না .o সরাসরি।
দ্য '.' এই ভেরিয়েবলের অংশ।

সেটভার.ইউ
এই ইউনিটটি ভেরিয়েবল তৈরি করে, যা দ্বারা অভ্যন্তরীণভাবে ব্যবহৃত হয় কনফিগার করুন সেট a
নির্ধারণ করাএকটি প্রদত্ত চিহ্নের /undef মান, এটি হঠাৎ পরিবর্তিত হলে একটি সতর্কতা নির্গত করে
আগের মান থেকে। এই ক্ষেত্রে:

val="$define"
d_variable সেট করুন
eval $setvar

যদি আগের $d_ভেরিয়েবল মান ছিল অ-শূন্য এবং $val ভিন্ন, একটি "হুউ"
সতর্কতা জারি করা হয়।

হু.উ
এই ইউনিট উত্পাদন করে থাম স্ক্রিপ্ট, যা একটি সতর্কতা নির্গত করে যখন মূল্য পরিবর্তনশীল মধ্যে
কার নাম $var এর পুরানো আগের মানের মত নয় $ ছিল. উপর
ফিরে $td এবং $tu সঠিক মান ধরে রাখুন নির্ধারণ করা or undef পরিবর্তনশীল দেখা
উদাহরণ Inlibc.U.

বিল্টিন প্রি-প্রসেসর
প্রতিটি ইউনিট অন্তর্ভুক্ত করা হবে কনফিগার করুন একটি বিল্ট-ইন প্রি-প্রসেসরের মাধ্যমে চালানো হয়। পূর্ব-
প্রসেসর স্টেটমেন্টগুলি '@' অক্ষর দ্বারা প্রবর্তিত হয় ('#' হল শেল মন্তব্য
চরিত্র)। এটি শুধুমাত্র সি প্রি-প্রসেসরের মতো কাজ করে তবে শেল এবং পার্লের জন্য অনুমতি দেয়
পালিয়ে যায় এখানে উপলব্ধ ফাংশন আছে:

@if অভিব্যক্তি
If অভিব্যক্তি সত্য, @end, @elsif বা @else পর্যন্ত কোড লোড করা চালিয়ে যান।

@এলসিফ অভিব্যক্তি
বিকল্প পছন্দ। যদি অভিব্যক্তি সত্য, @শেষ পর্যন্ত কোড লোড করা চালিয়ে যান,
আরেকটি @elsif বা @else।

@else ডিফল্ট কোড @if হলে লোড করতে হবে অভিব্যক্তি মিথ্যা এবং কোনটি ছিল
ঐচ্ছিক @elsif মিলেছে। @শেষ পর্যন্ত লোড করুন।

@end @if দ্বারা খোলা শর্তসাপেক্ষ লোডিং বিবৃতি বন্ধ করুন।

@ সংজ্ঞায়িত করুন প্রতীক
প্রি-প্রসেসরকে বলে যে প্রতীক এখন থেকে সংজ্ঞায়িত করা হয়।

শর্তসাপেক্ষ অভিব্যক্তি প্রতীকের নাম অন্তর্ভুক্ত করতে পারে (মান সত্য যদি প্রতীক চান বা
মাধ্যমে সংজ্ঞায়িত @ সংজ্ঞায়িত করুন অথবা শেল/পার্ল পালিয়ে যায়। যারা পরমাণু ব্যবহার করে একত্রিত করা যেতে পারে
ঐতিহ্যগত বুলিয়ান অপারেটর '!' অস্বীকারের জন্য, '&&' যৌক্তিক এবং, এবং '||' যৌক্তিক জন্য
বা।

একক বন্ধনীর মধ্যে আবদ্ধ পাঠ্য একটি শেল পরীক্ষা, যখন ডবল ব্র্যাকেটের মধ্যে পাঠ্য
একটি পার্ল পরীক্ষা। যথাঃ অভিব্যক্তি:

{ খোল পাঠ }
{{ Perl পাঠ }}

অনুবাদ করা হয়:

if খোল পাঠ >/dev/null 2>&1; তারপর প্রস্থান করুন 0; অন্যথায় প্রস্থান 1; fi
যদি (Perl পাঠ) {প্রস্থান 0;} অন্যথা {প্রস্থান 1;}

এবং প্রস্থান স্থিতি একটি বুলিয়ান মান পেতে আদর্শ উপায়ে ব্যবহার করা হয়, অর্থাৎ 0 সত্য এবং
বাকি সব মিথ্যা। মনে রাখবেন যে শুধুমাত্র সাধারণ শর্তগুলি পার্লে প্রকাশ করা যেতে পারে, পর্যন্ত
কিছু জটিল কোড ভিতরে লোড করা যেতে পারে metaconfig এবং মৃত্যুদন্ড কার্যকর করা হয়েছে।

বিল্ট-ইন প্রি-প্রসেসর কিছু ইউনিটকে সূক্ষ্মভাবে সুরক্ষিত করতে ব্যবহার করা যেতে পারে (দেখুন d_gethname.U একটি জন্য
জটিল উদাহরণ) আসলে প্রোগ্রাম বা ফাইল দ্বারা ব্যবহৃত প্রতীকগুলির উপর নির্ভর করে
বিতরণে উপস্থিত। উদাহরণস্বরূপ, Oldconfig.U যেমন একটি পরীক্ষা ব্যবহার করে:

@if {test -d ../hints}

এবং কনফিগার করুন ইঙ্গিত-নির্ভর কোড থাকবে শুধুমাত্র যদি একটি থাকে নির্দেশ ডিরেক্টরিতে
প্যাকেজের শীর্ষ স্তরের ডিরেক্টরি। মনে রাখবেন যে পরীক্ষাগুলি 'এর মধ্যে থেকে চালানো হয়.MT' ডিরেক্টরি,
তাই পরীক্ষায় '../' প্রয়োজন।

প্রি-প্রসেসরও ব্যবহার করা যেতে পারে যাতে কোনো প্রতীক না থাকলে অকেজো কোড না রাখা যায়
সংজ্ঞায়িত একাধিক প্রতীক সংজ্ঞায়িত ইউনিটগুলিকে সেভাবে সুরক্ষিত করা যেতে পারে (যেহেতু ইউনিটটি
একটি @if/@end জোড়ার মধ্যে প্রতীক-নির্ভর কোড সংগ্রহ করে সামগ্রিকভাবে লোড করা হয়েছে। জন্য
দৃষ্টান্ত:

@যদি I_TIME || I_SYS_TIME || I_SYS_TIME_KERNEL
need_time_h = 'সত্য'
@অন্য
need_time_h = 'মিথ্যা'
@শেষ

সোর্স কোড নিয়ন্ত্রণ করে এমন তিনটি চিহ্নের মধ্যে একটি ব্যবহার করে কিনা তা পরীক্ষা করবে
দ্য সময় or sys/time.h অন্তর্ভুক্তি এবং সেই অনুযায়ী শেল প্রতীক সংজ্ঞায়িত করুন। যে দেয়
কনফিগার করুন উত্সগুলির কী প্রয়োজন সে সম্পর্কে একটি প্রতিক্রিয়া এবং সংশোধন করার ত্রুটি এড়ান
হিমায়িত ইউনিট।

'?W:' লাইনের মাধ্যমে, আপনি ইন্টারস্টিং কম্বিনেশন পেতে পারেন। উদাহরণস্বরূপ, i_time.U একক
জানতে হবে সি উৎসের কোনো ব্যবহার আছে কিনা struct হয় সময় অঞ্চল প্রকার অতএব,
লাইন:

?W::টাইমজোন

প্রতীক সংজ্ঞায়িত করার পার্শ্ব-প্রতিক্রিয়ার জন্য ব্যবহৃত হয় সময় অঞ্চল প্রাক-প্রসেসরের জন্য। দ্য
ইউনিট কোড তারপর বলতে পারেন:

@if টাইমজোন
'-DS_TIMEZONE'' এ s_timezone এর জন্য; করতে
@অন্য
s_timezone=''
@শেষ

... কোড s_timezone ব্যবহার করে...

@if টাইমজোন
সম্পন্ন
@শেষ

এবং একটি অতিরিক্ত লুপের জন্য পরপর দুটি মান চেষ্টা করে দেখুন s_টাইমজোন পরিবর্তনশীল, কিন্তু শুধুমাত্র
যদি লাগে.

অপ্রচলিত প্রতীক
অপ্রচলিত চিহ্নগুলি পুরানোগুলির সাথে রূপান্তর সহজ করার জন্য সংরক্ষণ করা হয় metaconfig ইউনিট যদি না
দ্য -o সুইচ পাস করা হয় metaconfig তারা উপেক্ষা করা হবে। যাইহোক, একটি অপ্রচলিত ফাইল হবে
উৎপন্ন হবে, আপনাকে বলছে কোন ফাইলগুলি সেই অপ্রচলিত চিহ্নগুলি ব্যবহার করছে এবং কী
নতুন প্রতীক ব্যবহার করা হবে.

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

কনফিগার করুন সংকেতগুলি
এটা ঘটতে পারে যে অভ্যন্তরীণ কনফিগারেশন যুক্তি ভুল পছন্দ করে। জন্য
উদাহরণস্বরূপ, কিছু প্ল্যাটফর্মে, vfork() সিস্টেম কল উপস্থিত কিন্তু ভাঙা, তাই এটি করা উচিত
ব্যবহার করা হবে না। ইউনিটে নিজেরাই সেই জ্ঞান অন্তর্ভুক্ত করা সম্ভব নয়, কারণ
এটি একটি অস্থায়ী সমস্যা হতে পারে যা বিক্রেতা শেষ পর্যন্ত ঠিক করবে, বা এমন কিছু
একটি নতুন OS আপগ্রেড দ্বারা প্রবর্তিত হয়েছিল।

যাইহোক, সেই সমস্ত ক্ষুদ্র ক্ষুদ্র সমস্যাগুলির জন্য যা খুব সিস্টেম-নির্দিষ্ট, metaconfig
ইঙ্গিত ফাইল সমর্থন প্রদান করে। এটি ব্যবহার করার জন্য, আপনাকে একটি তৈরি করতে হবে নির্দেশ ডিরেক্টরিতে
প্যাকেজের শীর্ষ স্তরের ডিরেক্টরি, এবং আপনি যখন চালান তখন এটি রাখুন metaconfig. যে লোড হবে
থেকে ইঙ্গিত সম্পর্কিত অংশ Oldconfig.U.

তারপর থেকে, আপনি কিছু শেল ভেরিয়েবল প্রি-সেট করতে পারেন কনফিগার করুন একটি OS-নির্দিষ্ট ব্যবহার করে
.sh ফাইল। কোড আছে Oldconfig.U যা অনুমান করার চেষ্টা করে কোন ইঙ্গিত ফাইলের প্রয়োজন
সিস্টেমের ওএস নাম, কার্নেলের নাম, রিলিজের উপর ভিত্তি করে একটি আদর্শ নাম গণনা করা
সংখ্যা, ইত্যাদি... যেহেতু এই তথ্যটি দ্রুত পরিবর্তিত হতে পারে, তাই আমি এটি নথিভুক্ত করছি না
এখানে. আপনাকে কোডটি রিভার্স ইঞ্জিনিয়ার করতে হবে Oldconfig.U.

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

উদাহরণস্বরূপ, SGI সিস্টেমগুলি একটি ভাঙা বলে পরিচিত vfork() সিস্টেম কল, এই হিসাবে
লেখা এবং সংশ্লিষ্ট ইঙ্গিত ফাইলের নাম হয় sgi.sh. তাই আপনাকে যা করতে হবে তা তৈরি করুন
a hints/sgi.sh যে ফাইলে আপনি লিখছেন:

d_vfork="$define"

যা সবসময় রিম্যাপ করবে vfork on কাঁটাচামচ (দেখুন d_vfork.U) যখন জন্য SGI সিস্টেমে চলমান
প্রথমবার, কনফিগার করুন একটি আছে যে সনাক্ত করবে hints/sgi.sh ফাইল, এবং আমরা যে
একটি IRIX মেশিন (কার্নেলের নাম প্রায়ই /irix), তাই এটি প্রস্তাব করবে sgi হিসেবে
সম্ভাব্য ইঙ্গিত। যদি ব্যবহারকারী এটি গ্রহণ করে, এবং যেহেতু $d_vfork এর মাধ্যমে মান পরিবর্তন করা হয়
$সেটভার কল, ক হু! সতর্ক করার জন্য নির্গত হবে যে আমরা মানটিকে ওভাররাইড করতে চলেছি
দ্বারা গণনা করা হয়েছে কনফিগার করুন.

মনে রাখবেন যে আপনাকে প্রদান করতে হবে না সব দ্বারা পরিচিত ইঙ্গিত Oldconfig.U. যদি একটি ইঙ্গিত ফাইল হয়
অনুপস্থিত, এটি একটি সম্ভাব্য পছন্দ হিসাবে প্রস্তাব করা হবে না. হিউরিস্টিক পরীক্ষাগুলি গণনা করতে দৌড়েছিল
সম্ভাব্য ইঙ্গিত প্রার্থী flaky হয়. আপনার যদি নতুন মান বা বিভিন্ন পরীক্ষা থাকে, অনুগ্রহ করে
ওদেরকে আমার কাছে পাঠাও...

ওভাররাইডিং গ্রেপ্তার
আপনি যদি একটি তৈরি করেন config.over শীর্ষ স্তরের ডিরেক্টরিতে ফাইল, কনফিগার করুন আপনি যদি আপনাকে জিজ্ঞাসা করবে
ডিফল্ট মান ওভাররাইড করতে এটি লোড করতে চান। এটি তৈরি করার আগে করা হয়
config.sh ফাইল, তাই এটি আপনাকে সেখানে সংরক্ষিত মানগুলি প্যাচ করার সুযোগ দেয়।

এটি ইঙ্গিত পদ্ধতির থেকে আলাদা যে এটি একটি স্থানীয় ফাইল, যা ব্যবহারকারী
তার নিজের ব্যবহারের জন্য তৈরি করতে বিনামূল্যে. আপনি নিজেই এই ধরনের একটি ফাইল প্রদান করা উচিত নয়, কিন্তু যাক
ব্যবহারকারী এই সম্ভাবনা সম্পর্কে জানেন।

কনফিগার করুন অপশন সমূহ
সার্জারির কনফিগার করুন কমান্ড লাইনে নির্দিষ্ট কিছু অপশন সহ স্ক্রিপ্ট কল করা যেতে পারে, to
সামান্য তার আচরণ পরিবর্তন. এখানে অনুমোদিত বিকল্প আছে:

-d সমস্ত উত্তরের জন্য ডিফল্ট ব্যবহার করুন।

-e এর উত্পাদন অতীত প্রশ্ন ছাড়াই যান config.sh.

-f ফাইল একটি ডিফল্ট কনফিগারেশন হিসাবে নির্দিষ্ট ফাইল ব্যবহার করুন. যদি এই সুইচটি ব্যবহার না করা হয়,
কনফিগারেশন থেকে নেওয়া হয় config.sh, যখন উপস্থিত।

-h সাহায্য বার্তা প্রিন্ট করুন এবং প্রস্থান করুন।

-r সম্ভব হলে C চিহ্নের মান পুনরায় ব্যবহার করুন। এটি ব্যয়বহুল এড়িয়ে যাবে nm প্রতীক
নিষ্কাশন যদি প্রথমবার ব্যবহার করা হয় (পূর্ববর্তী কনফিগারেশন ফাইল ছাড়া),
কনফিগার করুন সম্পর্কে জানার জন্য একটি ছোট প্রোগ্রাম কম্পাইল এবং লিঙ্ক করার চেষ্টা করবে
একটি প্রতীকের উপস্থিতি, বা এর অনুপস্থিতি।

-s নিঃশব্দ অবস্থা. শুধুমাত্র ফাইল বর্ণনাকারী #4-এ মুদ্রিত স্ট্রিংগুলি দেখা যাবে
পর্দা (এটি গুরুত্বপূর্ণ বার্তা)। সম্পূর্ণরূপে বন্ধ করা সম্ভব নয়
কোন আউটপুট, কিন্তু আপনি ব্যবহার করতে পারেন 'কনফিগার করুন -ডার্স > / দেব / নাল 2> & 1' একটি পূর্ণ আছে
ব্যাচ কোন আউটপুট ছাড়া এবং কোন ব্যবহারকারীর ইন্টারঅ্যাকশনের প্রয়োজন নেই।

-D প্রতীক = মান
পূর্ব-সংজ্ঞায়িত করে প্রতীক নির্দিষ্ট বহন করতে মূল্য. এটি ব্যবহার করাও সম্ভব'-D
প্রতীক' যা 'সংজ্ঞায়িত' এর একটি ডিফল্ট মান ব্যবহার করবে।

-E কনফিগারেশন প্রশ্ন শেষে থামুন, একটি তৈরি করার পরে
config.sh. এটি কোনো কাজ করবে না'করা নির্ভর' অথবা .SH ফাইল নিষ্কাশন।

-K জ্ঞানী ব্যবহারকারী। আপনি যখন এই বিকল্পটি ব্যবহার করেন, তখন আপনি জানেন যে আপনি কী করছেন এবং
সুতরাং, এটি config.sh ফাইলটি সর্বদা পরিচালনা করা হবে যেন এটি হওয়ার উদ্দেশ্য ছিল
পুনরায় ব্যবহার করা হয়েছে, যদিও এটি একটি এলিয়েন সিস্টেমে তৈরি করা হতে পারে। এটাও
যখন গর্ভপাত রোধ করে কনফিগার করুন একটি অব্যবহারযোগ্য সি কম্পাইলার বা একটি ভুল সেট সনাক্ত করে
সি পতাকার। আরও শর্টকাট এই বিকল্পের মাধ্যমে চালু হতে পারে
ভবিষ্যৎ এই বিকল্পটি নথিভুক্ত করা হয়েছে কনফিগার করুন ব্যবহার বার্তা, আমাদের মনে করিয়ে দিতে
এর অস্তিত্ব সম্পর্কে, তবে প্রদত্ত বিবরণটি যথেষ্ট রহস্যময় বলে আশা করা হচ্ছে।
:-)

-O a এর মাধ্যমে নির্দিষ্ট করা মানগুলিকে অনুমতি দিন -D or -U যেকোনো লোড থেকে সেটিংস ওভাররাইড করতে
কনফিগারেশন ফাইল. ওভাররাইডিং উইল থেকে এটি ডিফল্ট আচরণ নয়
আপনি বর্তমানে পরিবর্তন করছেন তাদের থেকে প্রাপ্ত ভেরিয়েবলে প্রচারিত হবে না।
স্বাভাবিকভাবেই, ছাড়া -O, কোনো কনফিগারেশন ফাইল না থাকলেই সেটিং করা হয়
লোড করা হয়েছে, যা নিরাপদ যেহেতু ডেরিভেটিভ ভেরিয়েবলগুলি এখনও গণনা করা হয়নি...

-S সমস্ত .SH ফাইলে পরিবর্তনশীল প্রতিস্থাপন করুন। আপনি এর সাথে এটি একত্রিত করতে পারেন
-f আপনার পছন্দ মতো কনফিগারেশন প্রচার করতে সুইচ করুন।

-U প্রতীক=
প্রি-সেট প্রতীক একটি খালি মান সহ্য করা এটি ব্যবহার করাও সম্ভব'-U প্রতীক'
যা সেট হবে প্রতীক 'undef' করতে।

-V এর সংস্করণ নম্বর প্রিন্ট করুন metaconfig যে এই উৎপন্ন কনফিগার করুন লিপি
এবং প্রস্থান করুন।

চলমান পরিবেশ
শুরু করার পর, কনফিগার করুন একটি স্থানীয় তৈরি করে UU ডিরেক্টরি এবং সেখান থেকে চলে। ডিরেক্টরি
কনফিগার শেষ হলে অপসারণ করা হয়, কিন্তু এর মানে হল আপনাকে স্ক্রিপ্টটি এমন একটি জায়গা থেকে চালাতে হবে যেখানে
আপনি লিখতে পারেন, অর্থাৎ শুধুমাত্র পঠনযোগ্য ফাইল সিস্টেম থেকে নয়।

আপনি চালাতে পারেন কনফিগার করুন যদিও দূরবর্তীভাবে, যেমন:

../package/configure

স্থানীয়ভাবে উপস্থিত নয় এমন উত্সগুলি কনফিগার করতে। সমস্ত উত্পন্ন ফাইল রাখা হবে
যে ডিরেক্টরি থেকে আপনি স্ক্রিপ্টটি চালাচ্ছেন। এই জাদুটি src.U কে ধন্যবাদ করা হয়েছে
ইউনিট, যা সেট করছে $src এবং $rsrc প্যাকেজ উত্স নির্দেশ করতে ভেরিয়েবল. যে
পথ পূর্ণ বা আপেক্ষিক, কিনা তার উপর নির্ভর করে কনফিগার করুন একটি পূর্ণ বা মাধ্যমে আহ্বান করা হয়েছে
আপেক্ষিক পাথ.

মধ্যে থেকে UU সাবডিরেক্টরি, আপনি ব্যবহার করতে পারেন $rsrc সোর্স ফাইল অ্যাক্সেস করতে (ইউনিট
সোর্স ফাইলের লিঙ্ক ইঙ্গিত উল্লেখ করে সবসময় এই প্রক্রিয়াটি ব্যবহার করবে এবং অনুমান করবে না
ফাইল প্যারেন্ট ডিরেক্টরিতে উপস্থিত)। সমস্ত Makefiles $src ভেরিয়েবল ব্যবহার করা উচিত
বিল্ড ডিরেক্টরির শীর্ষ থেকে উত্সগুলির একটি পয়েন্টার হিসাবে (যেখানে কনফিগার করুন চালানো হয়),
হয় সরাসরি বা VPATH সেটিং এর মাধ্যমে।

দৌড়ানোর সময় কনফিগার করুন দূরবর্তীভাবে, .SH ফাইলগুলি বিল্ড ডিরেক্টরিতে বের করা হয়, নয়
উৎস গাছে যাইহোক, এটি কিছু ধরনের একটি প্রয়োজন করা কম্পাইল করতে সক্ষম হতে সমর্থন
একটি বিল্ড ডিরেক্টরিতে জিনিসগুলি থাকে যখন উত্সগুলি অন্যত্র থাকে৷

ব্যবহার জাদু পুনঃসংজ্ঞা
ব্যবহার করে -M সুইচ করুন, কিছু ম্যাজিক রিম্যাপিং এর মধ্যে হতে পারে confmagic.h
ফাইল যে ফাইল পরে অন্তর্ভুক্ত করা প্রয়োজন config.h, অবশ্যই, কিন্তু সব পরে
অন্যান্য প্রয়োজনীয় ফাইল অন্তর্ভুক্ত. যথা:

# "config.h" অন্তর্ভুক্ত করুন
...
... অন্যান্য অন্তর্ভুক্তি ...
...
# "confmagic.h" অন্তর্ভুক্ত করুন

সাধারণত, confmagic.h রিম্যাপ করার চেষ্টা করবে bcopy() on memcpy() যদি না bcopy() is
স্থানীয়ভাবে উপলব্ধ, বা রূপান্তর vfork মধ্যে কাঁটাচামচ যখন প্রয়োজন, তাই এটিকে অকেজো করা
সম্পর্কে বিরক্ত HAS_VFORK প্রতীক।

এই কনফিগারেশন জাদুটি শব্দকোষ ফাইলে নথিভুক্ত করা হয়েছে।

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

লেখক


ল্যারি ওয়ালlwall@netlabs.com> সংস্করণ 2.0 এর জন্য।
হারলান স্টেনharlan@mumps.pfcs.com> গুরুত্বপূর্ণ ইউনিট এক্সটেনশনের জন্য।
রাফায়েল মানফ্রেদিram@hptnos02.grenoble.hp.com>.
জন্য অন্যান্য অনেক অবদানকারী metaconfig ইউনিট একটি তালিকার জন্য ক্রেডিট ফাইল দেখুন.

onworks.net পরিষেবাগুলি ব্যবহার করে অনলাইনে metaconfig ব্যবহার করুন



সর্বশেষ লিনাক্স এবং উইন্ডোজ অনলাইন প্রোগ্রাম