انگلیسیفرانسویاسپانیایی

Ad


فاویکون OnWorks

metaconfig - آنلاین در ابر

metaconfig را در ارائه دهنده هاست رایگان OnWorks از طریق Ubuntu Online، Fedora Online، شبیه ساز آنلاین ویندوز یا شبیه ساز آنلاین MAC OS اجرا کنید.

این دستور متاکونفیگ است که می تواند در ارائه دهنده هاست رایگان OnWorks با استفاده از یکی از چندین ایستگاه کاری آنلاین رایگان ما مانند Ubuntu Online، Fedora Online، شبیه ساز آنلاین ویندوز یا شبیه ساز آنلاین MAC OS اجرا شود.

برنامه:

نام


metaconfig - یک سازنده اسکریپت پیکربندی

خلاصه


متاکونفیگ [-dhkmostvwGMV ] [-L دیر ]

شرح


متاکونفیگ برنامه ای است که اسکریپت های پیکربندی را تولید می کند. اگر نمی دانید که یک
پیکربندی اسکریپت است، لطفا به آموزش بخش این صفحه راهنما اگر بخواهید
شرح کامل (رسمی) روش استفاده متاکونفیگ و واحدهای آن، لطفا نگاه کنید
منابع بخش. در زیر یک معرفی سریع و مرجع برای افراد آگاه است
کاربران.

متاکونفیگ از مجموعه ای عمل می کند واحد که هر چیزی را که metaconfig در مورد آن می داند تعریف می کند
قابل حمل بودن هر واحد مستقل است و لازم نیست در جایی ثبت شود
غیر از درج در فهرست U عمومی یا دایرکتوری U خصوصی شما. اگر
بسته dist (که متاکونفیگ بخشی از آن است) در LIB نصب می شود، سپس U عمومی
دایرکتوری LIB/dist/mcon/U است. در این ماشین، دایرکتوری LIB /usr/share/dist است. شما
دایرکتوری خصوصی U، اگر یکی دارید، در دایرکتوری سطح بالای بسته شما قرار دارد.
قبل از اینکه بتوانید بدوید متاکونفیگ شما باید چند کار را انجام دهید:

· با اجرا کردن یک فایل .package در دایرکتوری سطح بالای بسته ایجاد کنید بسته بندی.
این برنامه از شما در مورد بسته خود می پرسد و آنچه را که به آن می گویید به خاطر می آورد تا به این ترتیب
همه برنامه های دور می توانند هوشمند باشند.

· با واژه نامه (در LIB/dist/mcon) مشورت کنید و اسکریپت های پوسته و برنامه های C خود را بنویسید.
از نظر نمادهایی که metaconfig می داند چگونه آنها را تعریف کند. لازم نیست بگی
metaconfig از کدام نمادها استفاده کرده اید، زیرا metaconfig آن را برای شما مشخص می کند.

· هر اسکریپت .SH مورد نیاز برای نوشتن Makefiles یا پوسته اسکریپت که بستگی دارد را ایجاد کنید
روی مقادیر تعریف شده توسط Configure. یه برنامه هست به اسم makeSH که به شما کمک خواهد کرد
تبدیل یک اسکریپت ساده به یک قالب script.SH. برخی از ویرایش ها هنوز باید انجام شود
بر روی فایل .SH حاصل انجام می شود تا قسمت پیکربندی متغیر را در
قسمت بالای اسکریپت (به نظرات درون خطی تولید شده توسط مراجعه کنید makeSH در داخل .SH شما
فایل).

یک فایل MANIFEST.new در دایرکتوری سطح بالای خود ایجاد کنید که تمام فایل های موجود را فهرست می کند
بسته شما این فایل خصوصی خواهد ماند و بخشی از نهایی نخواهد بود
توزیع (به عنوان یک راحتی، فایل MANIFEST توسط متاکونفیگ if
هنوز فایل MANIFEST.new وجود ندارد.) نام فایل باید اولین فیلد در هر کدام باشد
خط پس از مقداری فضای خالی، می توانید یک نظر کوتاه در توصیف فایل خود اضافه کنید. فقط
فایل های منبع باید در آنجا فهرست شوند. فایل ویژه patchlevel.h (که است
توسط ابزارهای وصله کار و نگهداری می شود -- ببینید اهسته دست زدن به(1)) باید بخشی از
فایل MANIFEST.new، اما ممکن است بی‌صدا توسط برخی ابزارها نادیده گرفته شود. به عنوان یک قاعده کلی،
فقط فایل هایی که توسط RCS نگهداری می شوند باید در آنجا لیست شوند patchlevel.h بودن فایل
یک استثنا مهم

· در صورت تمایل، ممکن است بخواهید یک فایل MANIFEST ایجاد کنید، که یک نسخه صادر شده خواهد بود
از MANIFEST.new شما. آن فایل باید بخشی از نسخه باشد، یعنی در هر دو فهرست شود
MANIFEST.new و خود MANIFEST. یکی از متاکونفیگ واحدها از این موضوع اطلاع دارند
فایل و پیکربندی را مجبور می‌کند تا بررسی انتشار را انجام دهد و از تمام فایل‌ها اطمینان حاصل کند
لیست شده وجود دارد بخشی از توزیع. فایل های MANIFEST و MANIFEST.new باید
متمایز باشید، نه پیوند.

· هر فایل .U را که می خواهید تغییر دهید در فهرست U خصوصی خود کپی کنید. هر فایل U
در دایرکتوری U خصوصی شما در اولویت نسبت به فهرست U عمومی استفاده خواهد شد
فهرست راهنما. برای مثال، یکی از راه‌های اجباری گنجاندن هر واحد، کپی کردن End.U است
به دایرکتوری U. خود فایل کنید و نام واحدی را که می خواهید به عنوان وابستگی به آن اضافه کنید
پایان خط ?MAKE:. واحدهای خاصی را فقط می توان از این طریق مجبور کرد، یعنی
آنهایی که به شکل Warn_*.U و Chk_*.U هستند. همچنین می توانید پیش فرض خاصی را سفارشی کنید
با کپی کردن Myinit.U در دایرکتوری U خصوصی بسته خود، متغیرها را پیکربندی کنید
تنظیم متغیرها در آن واحد

اکنون شما آماده اجرا هستید متاکونفیگ. که یک ایجاد خواهد کرد مجموعه فایل، و به صورت اختیاری a
config_h.SH فایل (اگر منابع شما از نمادهای C استفاده می کنند). فایل های تولید شده خواهد بود
در صورت لزوم به طور خودکار به MANIFEST.new شما اضافه می شود. فراموش نکنید که خود را به روز کنید
هر چند فایل MANIFEST.

برای ایجاد واحدهای جدید، موارد زیر را انجام دهید:

· یک واحد مشابه را در یک فایل .U جدید کپی کنید. نامی که انتخاب می کنید باید نام a باشد
متغیر تولید شده توسط واحد، اگرچه این فقط برای شما راحت است، نه یک
نیاز برای جلوگیری از قطع شدن نام فایل باید 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: پایان دهید. یا
?S:. خط الگوریتمی که ورودی های نماد پیش پردازنده C را برای
واژه نامه در نظرات برای config.h به این بستگی دارد.

· مطمئن شوید که منظور از همه شما؟ خطوط درست است ترتیب صحیح این است:

?RCS: و ?X: اساساً فقط نظرات
?MAKE: وابستگی های metaconfig
?Y: دستورالعمل طرح واحد
?S: تعاریف پوسته واژه نامه
?C: واژه نامه C تعاریف
?H: تعاریف config.h
?M: تعاریف confmagic.h
?W: نمادهای مورد نظر
?V: نمادهای قابل مشاهده
?F: فایل های ایجاد شده توسط این واحد
?T: نمادهای پوسته موقت استفاده می شود
?D: مقدار پیش فرض وابستگی های اختیاری
?O: برای علامت گذاری واحدهای منسوخ استفاده می شود
?LINT: نکات فلزینت
?INIT: مقداردهی اولیه نمادهای پوسته

در اینجا یک مثال برای نشان دادن ترتیب خطوط و فرمت های مختلف مجاز آورده شده است:

?RCS: $RCS-Id$
?RCS: اطلاعات حق چاپ
?RCS: $RCS-Log$
؟ایکس:
?X: یک مثال ساختگی
؟ایکس:
?MAKE:d_one دو: سه + چهار پنج
?MAKE: -انتخاب اضافه کردن $@ %
?Y:پیش فرض
?S:d_one:
?S: نماد پوسته اول، به صورت مشروط ONE را تعریف می کند.
?S:.
?S:دو:
?S: نماد پوسته دوم، مقدار برای TWO.
?S:.
?C:ONE:
?C: اولین نماد C.
?C:.
?C:TWO:
?C: نماد C دوم.
?C:.
?H:#$d_one ONE /**/
?H:#دو "$two" را تعریف کنید
?H:#$d_one ONE_TWO "$two"
?H:.
?M:flip: HAS_FLIP
?M:#ifndef HAS_FLIP
?M:#define flip(x) flop(x)
?M:#endif
?M:.
?W:%<:one_two
?V:p_one p_two:p_three
?F:file ./ftest !tmp
?T:tmp var
?D:two='undef'
?LINT:تغییر سه
?INIT:two_init='2'
: کد پوسته پیاده سازی واحد به شرح زیر است
p_one='one'
p_two = 'دو'
p_three=""

بگذارید یک بار دیگر بگویم: تعریف واحد فوق الف است جعلی یکی برای نشان دادن
امکانات مختلف چنین واحدی به هر حال هدف کمی را دنبال می کند ... برخی دیگر
ویژگی های پیشرفته در اینجا توضیح داده نشده است. لطفا به منابع بخش برای بیشتر
اطلاعات کامل

· واحد را به صورت مناسب در فهرست U عمومی یا خصوصی قرار دهید.

· اجرا مجدد متاکونفیگ.

· واحد خود را به [ایمیل محافظت شده] (رافائل مانفردی) برای درج در نسخه اصلی،
اگر فکر می کنید مورد علاقه عمومی است.

به منظور اضافه کردن یک برنامه جدید برای قرار گرفتن:

· Loc.U را ویرایش کنید و نام برنامه را هر دو به خط ?MAKE: اضافه کنید (بین
دو نقطه) و به loclist یا trylist (بسته به اینکه برنامه باشد
اجباری است یا نه).

Metaconfig را مجدد اجرا کنید.

· اگر فکر می کنید کلی است، واحد خود را برای من بفرستید تا در نسخه اصلی درج شود
علاقه.

نکاتی برای نوشتن فایل های .U:

* همیشه از "rm -f" استفاده کنید زیرا سیستم هایی وجود دارند که rm به طور پیش فرض تعاملی است.

* از "set -- ..." استفاده نکنید زیرا "--" با هر پوسته کار نمی کند. از "set x..." استفاده کنید.
تغییر مکان".

* از "unset ENV" استفاده نکنید زیرا unset کاملا قابل حمل نیست. به جای آن بگویید «ENV=''.

* به دلیل سیستم های Eunice همیشه از اکو " " (با فاصله) استفاده کنید.

* فقط استفاده کنید آزمون با -r، -w، -f یا -d زیرا اینها تنها سوئیچ‌های قابل حمل هستند. که در
به طور خاص، از "تست -x" اجتناب کنید.

* فقط از برنامه هایی استفاده کنید که با V7 ارائه شده اند، تا بدانید همه آنها را دارند.

* وقتی می‌خواهید به صورت شرطی grep کنید، از $contains استفاده کنید، زیرا همه grep‌ها a را بر نمی‌گردانند
وضعیت معقول حتما خروجی را با استفاده از '>/dev/null به /dev/null هدایت کنید
2>&1'.

* از "if test" به جای "اگر [...]" استفاده کنید زیرا هر sh ساختار دوم را نمی داند.

* از اسکریپت myread برای ورودی ها استفاده کنید تا بتوانند shell escape و پیش فرض را انجام دهند
ارزیابی: شکل کلی آن است

مورد "$grimble" در
'') dflt=452;;
*) dflt="$grimble";;
که C
rp='چند گرامبل دارید؟'
. ./myread
grimble="$ans"

* هنگام درخواست نام مسیر فایل از اسکریپت getfile برای داشتن اختیاری استفاده کنید
~ گسترش نام و بررسی سلامت عقل. برای توضیحات کامل به واحد Getfile.U مراجعه کنید.

* همیشه a قرار دهید

$startsh

در بالای هر اسکریپت تولید شده ای که قرار است راه اندازی یا منبع آن باشد
مجموعه.

* هرگز یونیکس‌های رایج را مانند این که یک فایل شیء با a ختم می‌شود، فرض نکنید .o و
که نام کتابخانه به آن ختم می شود .a. استفاده از $_o و $_a در عوض متغیرها (نگاه کنید به
Unix.U).

* هنگام انجام یک تست کامپایل-لینک-اجرای، همیشه آن را به این صورت بنویسید:

$cc $ccflags $ldflags try.c -o $libs را امتحان کنید

زیرا برخی از سیستم ها نیاز دارند که پرچم های پیوند قبل از کامپایل مشخص شوند
هدف (به استثنای کتابخانه های پیوند دهنده دنباله دار).

* با استفاده از «>&4» برای تغییر مسیر خروجی، پیام های مهمی را در توصیفگر فایل شماره 4 صادر کنید.
فقط آن پیام ها زمانی ظاهر می شوند که -s سوئیچ داده می شود مجموعه در
خط فرمان (حالت خاموش).

* همیشه سعی کنید مشخص کنید که آیا یک ویژگی به خاص ترین روش وجود دارد یا خیر - نکن
وقتی می‌توانید libc را grep کنید، بگویید «if bsd». سیستم های هیبریدی زیادی وجود دارد، و
هر ویژگی باید به خودی خود بایستد یا سقوط کند.

* همیشه سعی کنید مشخص کنید که آیا یک ویژگی به کلی ترین شکل وجود دارد یا خیر، به طوری که
بسته های دیگر می توانند از واحد شما استفاده کنند.

* در صورت شک، یک پیش فرض تنظیم کنید و بپرسید. چیزی را فرض نکن

* اگر فکر می‌کنید کاربر اشتباه می‌کند، این واقعیت را بپذیرید که ممکن است حق با او باشد. برای
به عنوان مثال، او می‌تواند Configure را روی سیستمی متفاوت از آنچه که قرار است استفاده کند، اجرا کند
محصول نهایی در

Metaconfig نام‌های زیر را در دایرکتوری شما ذخیره می‌کند و اگر از چنین نامی استفاده می‌کنید، آن را ذخیره می‌کند
ممکن است کلافه شود یا اثرات غیر قابل پیش بینی دیگری داشته باشد:

.MT/*
مجموعه
خواسته
منسوخ شده
پیکربندی
config_h.SH
confmagic.h
U/*
MANIFEST.new

علاوه بر این، Configure ممکن است این نام‌ها را در دایرکتوری که در آن اجرا می‌شود مخدوش کند:

UU/*
config.sh
پیکربندی

OPTIONS


گزینه های زیر توسط شناسایی می شوند متاکونفیگ:

-d حالت اشکال زدایی را روشن کنید. واقعا مفید نیست مگر اینکه در حال رفع اشکال باشید متاکونفیگ
خود.

-h پیام راهنما را چاپ کنید و خارج شوید.

-k دایرکتوری موقت را نگه دارید تا بتوانید فایل های کاری مورد استفاده را بررسی کنید
متاکونفیگ برای ساختن خودت مجموعه اسکریپت فقط هنگام اشکال زدایی مفید است
واحد.

-m مقدار زیادی حافظه را در نظر بگیرید و فضا را تعویض کنید. این کار جستجوی نمادها را در آن سرعت می بخشد
فایل های منبع با مقدار قابل توجهی از زمان، در هزینه حافظه
مصرف...

-o نمادهای منسوخ را روی نمادهای جدید ترسیم کنید. اگر هنوز سوئیچ دارید از این سوئیچ استفاده کنید
نمادهای منسوخ در کد منبع شما و نمی خواهید (یا نمی توانید) حذف کنید
آنها در حال حاضر در غیر این صورت نمادهای منسوخ نادیده گرفته می شوند، اگرچه این
از طرف به شما هشدار خواهد داد متاکونفیگ.

-s حالت بی صدا را روشن کنید.

-t نمادها را همانطور که پیدا می شوند ردیابی کنید.

-v حالت پرحرف را روشن کنید.

-w فرض کنید فایل Wanted به روز است. با این کار زمان و حافظه رد می شود
مرحله مصرف اسکن کد منبع، به دنبال نمادهای شناخته شده است. از آن استفاده کنید
فقط زمانی که می دانید فایل منبع شما نسبت به آن تغییر نکرده است
استخر از متاکونفیگ نمادهای مورد استفاده

-G همچنین یک گنو ارائه دهید پیکربندیمانند پایان جلو به تولید شده است مجموعه
اسکریپت، در توزیع نیز گنجانده شود. این فقط یک لفاف است
در اطراف مجموعه اسکریپت به طور طبیعی، اما به مردم اجازه می دهد با آن آشنا شوند
ابزار گنو که هنگام مواجهه با توزیع جدید از بین نرود.

-L دیر مکان پیش‌فرض کتابخانه را لغو کنید. به طور معمول فقط برای متاکونفیگ مفید است
نگهدارنده ها به صورت محلی از واحدهای در حال توسعه به جای استفاده از
در دسترس عموم در دیر مشخص شده است که حاوی واحدها است
U دایرکتوری.

-M اجازه تولید a confmagic.h فایل برای بازنگری خودکار مقداری خوب
نمادهای شناخته شده برای برخی جایگزین های دیگر، مانند کپی() در حال نقشه برداری مجدد
شفاف به memcpy() زمانی که در دسترس نیست این گزینه روشن است
به طور خودکار زمانی که a confmagic.h فایل در دایرکتوری سطح بالا وجود دارد.
اگر می خواهید این گزینه را برای همیشه غیرفعال کنید، به سادگی آن فایل را حذف کنید.

-V شماره نسخه را چاپ کنید و خارج شوید.

آموزش


این بخش (طولانی) مقدمه ای است برای متاکونفیگ، که در آن همه موارد را یاد خواهیم گرفت
اصول اولیه اگر از قبل نحوه استفاده را می دانید متاکونفیگ، می توانید با خیال راحت به بعدی بروید
بخش.

بررسی اجمالی
معمولاً وقتی می خواهید بسته منبعی را برای کامپایل در یک پلتفرم معین دریافت کنید
برای ویرایش Makefile اصلی (با فرض وجود یکی!)، یک کامپایلر C را انتخاب کنید، مطمئن شوید
کتابخانه های مناسب را داشته باشید، و سپس آن را فعال کنید ساخت فرمان اگر بسته معقول باشد
خوب نوشته شده است، کامپایل می شود (بدون اینکه اخطاری یک گزینه باشد :-). به خودی خود، آخرین
جمله یک عملکرد واقعی است، زیرا با توجه به انواع پلتفرم های یونیکس امروزی موجود است
و تنوع طعم ها، به این معنی است که نویسنده بسته به عمق رفته است
با توجه به آزمایش‌های استاندارد، حدس زدن و آشفتگی، نمی‌توان انتخاب‌های درست را کشف کرد
اطراف با سیستم شامل و انواع.

با این حال، نویسنده علیرغم همه استعدادش، احتمالاً نمی تواند بداند که برخی از سیستم ها دارای یک
فراخوانی سیستم شکسته، یا اینکه برخی از ساختارهای سیستم فاقد یک فیلد استاندارد دیگر هستند، یا
صرفاً اینکه آیا یک فایل شامل وجود دارد یا خیر. و من به موارد ضمنی توجه نمی کنم
مفروضات، مانند نوع برگردانده شده توسط malloc () عملکرد یا وجود
تغییر نام () تماس سیستم برای نام بردن چند. اما این دانش برای دستیابی به واقعیت ضروری است
قابل حمل

حالا از خودمان سوء استفاده نکنیم. استفاده از این اطلاعات به مهارت های بیشتری نیاز دارد، اما می تواند
منجر به برنامه‌های قابل حمل بیشتر می‌شود، زیرا سپس به روشی مستقل از سیستم نوشته می‌شود
و تنها بر این واقعیت تکیه می کند که برخی از فرضیات درست یا نادرست در یک سیستم خاص است،
هر فرضی با یکدیگر ارتباطی ندارد. یعنی نمی گوییم: روی الف هستیم
سیستم BSD یا ما روی یک سیستم USG هستیم. به هر حال این روزها خیلی مبهم است. نه، ما می خواهیم
به کد منبع بگویید: این سیستم این را ندارد تغییر نام () تماس سیستمی و malloc ()
برمی گرداند a (خالی *) ارزش.

Metaconfig ابزاری است که به شما این امکان را می دهد که این کار را انجام دهید، با مزیت اضافی که ندارد
اگر همه چیز خوب پیش رفت، باید Makefile را به صورت دستی ویرایش کنید. با دویدن متاکونفیگ، شما ایجاد می کنید
اسکریپت پوسته نامگذاری شد مجموعه. تلاش های زیادی برای پیکربندی اسکریپت انجام شده است
داخلی برای اطمینان از اینکه از این زمان بر روی 99٪ از پوسته های موجود اجرا می شود
نوشتن پیکربندی سیستم هدف را بررسی می‌کند، در صورت شک و تردید سؤال می‌پرسد
تمام پاسخ ها را در یک فایل پوسته جمع آوری کنید که به نوبه خود می توان از آن استفاده کرد
به طور خودکار Makefiles پیکربندی شده را تولید می کند و C شامل فایل ها می شود.

فقط یک مجموعه محدود (اما بسیار بزرگ) از نمادها برای اسکریپت های پوسته شما وجود دارد
و برنامه های C همه آنها در فایل واژه نامه مستند شده اند. تنها کاری که باید انجام دهید این است که یاد بگیرید
در مورد آنها و شروع به استفاده از آنها برای رفع مشکلات قابل حمل و پیکربندی. سپس،
با دویدن متاکونفیگ، یک اسکریپت Configure مناسب برای بسته شما ایجاد می شود.

اسکریپت Configure از چندین واحد (بیش از 300) ساخته شده است که هر واحد وجود دارد
مسئول تعریف تعداد کمی از نمادهای پوسته و/یا C است. واحدها مونتاژ می شوند
با هم در مرحله آخر، گراف وابستگی را رعایت می کنند (یک واحد ممکن است به نتیجه نیاز داشته باشد
از چندین واحد دیگر که سپس قبل از آن در اسکریپت قرار می گیرند).

نمادها
نمادها مهمترین چیز در متاکونفیگ جهان آنها کوچکترین هستند
موجودیت شناخته شده، معمولاً یک کلمه، و می توان در پایان پیکربندی مقداری به آن اعطا کرد
اجرا. به عنوان مثال، نماد C پیش پردازنده HAS_RENAME هست یک متاکونفیگ نماد آن
تضمین شده است که اگر، و فقط اگر، تعریف شود تغییر نام () تماس سیستمی وجود دارد. به همین ترتیب،
la $ranlib متغیر پوسته بسته به این که آیا روی ":" یا "ranlib" تنظیم می شود
تماس به ranlib برای سفارش فایل کتابخانه ای به برنامه نیاز است. چگونه این کار نمی کند
در حال حاضر مهم است، آنچه مهم است درک این نکته است که به آن نمادها a داده شده است زندگی
(یعنی یک مقدار) بر مجموعه اجرا.

استفاده از نمادها نسبتاً ساده است. در یک فایل منبع C، شما به سادگی از نماد استفاده می کنید
مقدار، به عنوان یک دستورالعمل پیش پردازنده (به عنوان مثال: #ifdef HAS_RENAME) یا اگر نماد
مقدار یک رشته است، مستقیماً همانطور که از یک ماکرو در C استفاده می کنید. و در یک فایل پوسته یا a
Makefile، می توانید مستقیماً به نماد پوسته ارجاع دهید.

در واقع، من دروغ می گویم، زیرا این کاملاً به اندازه پاراگراف قبلی جادویی نیست
می تواند صدا کند. در یک فایل C، باید Configure-produced را وارد کنید پیکربندی فایل، و
شما باید اسکریپت پوسته یا Makefile خود را در یک فایل .SH قرار دهید و می توانید به پوسته ارجاع دهید
نماد فقط در قسمت جایگزینی متغیر آن فایل .SH. بیشتر در این مورد بعدا.

منبع فایل ها
نمادها ممکن است فقط در مجموعه محدودی از فایل های منبع ظاهر شوند، زیرا متاکونفیگ فقط
هنگام جستجوی نمادهای شناخته شده، آن ها را اسکن کنید، سعی کنید بفهمید به کدام واحدها نیاز دارد.
می توانید از نمادهای C در فایل های منبع C استفاده کنید، یعنی فایل هایی با a .c, .h, .y or .l پسوند ، و
نمادهای پوسته فقط در فایل های .SH جستجو می شوند.

برای به دست آوردن مقدار یک نماد، یک فایل C باید حاوی خاص باشد پیکربندی
فایلی که توسط مجموعه هنگامی که نمادهای C وجود دارند. و فایل های .SH اجرا می شوند
از طریق یک پوسته، یک فایل جدید تولید می کند. با این حال، در قسمت بالای فایل .SH،
ویژه config.sh فایل (همچنین با اجرا تولید می شود مجموعه) منبع و متغیر است
تعویض ها اعمال می شود. در حقیقت، پیکربندی با اجرای آن تولید می شود متاکونفیگ-تولید شده
config_h.SH فایل، دوباره با استفاده از جایگزینی متغیر. بنابراین ما قصد داریم به آن نگاه کنیم
کمی دقیق تر، زیرا این قلب کل است پیکر بندی طرح...

متغیر جایگزینی
ساختار پوسته ای به نام وجود دارد اینجا کلیک نمایید سند که یک دستور را قادر می سازد تا یک ورودی بگیرد
در خود اسکریپت مشخص شده است. این ورودی توسط پوسته به صورت دوتایی تفسیر می شود
رشته نقل قول شده یا یک رشته نقل قول شده بسته به شکل سند اینجا
مشخصات.

برای تعیین یک سند در اینجا، از نشانه "<<" و به دنبال آن یک شناسه استفاده می شود. از جانب
سپس، خطوط اسکریپت باقیمانده ورودی دستور را تشکیل می دهند، تا اینجا
سند به خودی خود در یک خط یافت می شود. جایگزینی پوسته (از جمله متغیر پوسته
جایگزینی) انجام می شود مگر اینکه شناسه با نقل قول های تک احاطه شده باشد. برای مثال:

var='اول'
تار = "دوم"
echo "--> first here document:"
گربه <
var='$var'
tar='$tar'
EOM
echo "--> second here document:"
گربه <<'EOM'
echo $var
پژواک $tar
EOM
echo "--> end."

هنگامی که از طریق یک پوسته اجرا شود، تولید خواهد کرد:

--> ابتدا سند اینجاست:
var='اول'
تار = "دوم"
--> سند دوم اینجا:
echo $var
پژواک $tar
--> پایان.

سند اول در اینجا محتوای خود را تفسیر می کند در حالی که سند دوم همانطور که هست خروجی است.
هر دو در یک اسکریپت .SH مفید هستند، همانطور که می خواهیم ببینیم.

با استفاده از .SH اسکریپت
یک اسکریپت .SH معمولاً با اجرای آن تولید می شود MakeSH اسکریپت دیگر یک فایل موجود،
تبدیل شدن پرونده به file.SH. بیایید یک مثال واحد بزنیم. در اینجا یک اسکریپت کوچک است
(بیایید آن را صدا کنیم افزایش دادن) که یک پیام واحد را چاپ می کند، به اندازه INT نوع داده در C.
متأسفانه، ارزش آن را دارد، بنابراین:

#!/ بن / شل
intsize='4'
echo "در این ماشین، نوع int $intsize بایت است"

بریم بدویم makeSH روی آن با تایپ کردن «makeSH افزایش دادن'. مجرد می گیریم intsize.SH پرونده که
به نظر می رسد:

مورد $CONFIG در
"))
if test -f config.sh; سپس TOP=.;
elif test -f ../config.sh; سپس TOP=..;
elif test -f ../../config.sh; سپس TOP=../ ..;
elif test -f ../../../config.sh; سپس TOP=../../..;
elif test -f ../../../../config.sh; سپس TOP=../../../..;
دیگر
echo "نمی توان config.sh را پیدا کرد."; خروج 1
fi
. $TOP/config.sh
;;
که C
: این کار فایل های SH را مجبور می کند تا هدف را در همان فهرست فایل SH ایجاد کنند.
: این برای این است که make depend همیشه بداند مشتقات SH را کجا پیدا کند.
مورد "$ 0" در
*/*) سی دی `expr X$0 : 'X\(.*\)/'` ;;
که C
echo "Extracting intsize (با جایگزینی متغیر)"
: این بخش از فایل دارای تعویض های متغیر روی آن خواهد بود.
: هر چیزی را که نیاز به زیرمجموعه های پیکربندی دارد از !NO!SUBS! بخش به !GROK!THIS!.
: از علائم و نشانه های دلاری که نمی خواهید تفسیر شوند محافظت کنید
: با گذاشتن بک اسلش در جلو. شما می توانید این نظرات را حذف کنید.
$spitshell >intsize <
$startsh
!GROK!این!

: در دلار و بکتیک های زیر نیازی به بک اسلش اضافی نیست.
$spitshell >>intsize <<'!نه!SUBS!'
intsize='4'
echo "در این ماشین، نوع int $intsize بایت است"
!نه!زیر!
chmod 755 intsize
$eunicefix intsize

قسمت اول این اسکریپت (در مورد بیانیه) در حال تلاش برای مکان یابی است config.sh
فایل، به منظور منبع آن. در $CONFIG متغیر به طور پیش‌فرض false است، زمانی که مقدار آن درست است
config.sh قبلاً منبع داده شده است (که اگر این فایل از آن اجرا شده باشد اینطور خواهد بود
در داخل مجموعه خود، اما اجازه دهید موضوع را در اینجا اشتباه نگیریم).

هنگامی که config.sh فایل منبع بوده است، تمام نمادهای پوسته تعریف شده توسط مجموعه هستند
تنظیم. ما می دانیم که دستیابی به یک عبارت مورد دوم که برای تغییر دایرکتوری فعلی استفاده می شود باید a
از مسیر برای رسیدن به این برنامه استفاده شود (مثلاً اگر گفتیم "sh ../scripts/intsize.SH'، ما
ابتدا اجرا می شودcd ../اسکریپت هاقبل از ادامه). اگر این را درک نمی کنید، نفهمید
نگران آن باشید

اینجا چیزهای جالبی می آید. این اسکریپت از $ spitshell متغیر، و اینطور نیست
چیزی که ما در مورد آن می دانیم ... هنوز اگر به فایل Glossary نگاه کنید، آن را خواهید دید
این متغیری است که با آن شناخته می شود متاکونفیگ. اگر این فایل را بخشی از توزیع خود کنید
(با گنجاندن آن در فایل MANIFEST.new، بعداً به آن باز خواهیم گشت) و اجرا کنید
متاکونفیگ، سپس مجموعه اسکریپت مقدار مناسبی را برای این متغیر تعیین می کند
و راه اندازی خواهد شد config.sh. همینطور $startsh و مرموز $eunicefix at
پایان. در یک سیستم معقول، بخش مربوطه از config.sh به این شکل خواهد بود:

spitshell='گربه'
startsh='#!/ بن / شل'
eunicefix=':'

آه! داریم به اونجا میرسیم حالا آشنا به نظر می رسد. ما با یک مجرد روبرو هستیم گربه فرمان که
ورودی از یک سند در اینجا با متغیر درون یابی می آید و خروجی آن به آن هدایت می شود
افزایش دادن. ارزش آن خواهد بود $startsh، یعنی '#!/ بن / شل'. تا الان خوبه

سپس به دومین بسط سند اینجا می رسیم تا باقی مانده اسکریپت را بدست آوریم. این
زمان، نماد سند اینجا با نقل قول های تک احاطه شده است، بنابراین محتویات آن خواهد بود
کلمه به کلمه به افزایش دادن فایل. بنابراین، با دویدنsh intsize.SH'، ما دریافت می کنیم
خروجی زیر:

استخراج intsize (با جایگزینی متغیر)

و با مشاهده فایل intsize تولید شده می بینیم:

#!/ بن / شل
intsize='4'
echo "در این ماشین، نوع int $intsize بایت است"

که دقیقاً همان چیزی است که در ابتدا داشتیم. تا کنون، این یک روش بدون عملیات است ...
اما، چقدر شگفت انگیز! این اتفاق می افتد (تصادفی محض، به من اعتماد کنید!)، که متاکونفیگ می داند
درباره $intsize نماد پوسته با انتقال مقدار اولیه intsize به متغیر-
ناحیه درونیابی اسکریپت .SH و مقداردهی اولیه آن با مجموعه-مقدار محاسبه شده
و حذف نظرات بیهوده اضافه شده توسط makeSH، ما گرفتیم:

مورد $CONFIG در
"))
if test -f config.sh; سپس TOP=.;
elif test -f ../config.sh; سپس TOP=..;
elif test -f ../../config.sh; سپس TOP=../ ..;
elif test -f ../../../config.sh; سپس TOP=../../..;
elif test -f ../../../../config.sh; سپس TOP=../../../..;
دیگر
echo "نمی توان config.sh را پیدا کرد."; خروج 1
fi
. $TOP/config.sh
;;
که C
مورد "$ 0" در
*/*) سی دی `expr X$0 : 'X\(.*\)/'` ;;
که C
echo "Extracting intsize (با جایگزینی متغیر)"
$spitshell >intsize <
$startsh
intsize='$intsize'
!GROK!این!

$spitshell >>intsize <<'!نه!SUBS!'
echo "در این ماشین، نوع int $intsize بایت است"
!نه!زیر!
chmod 755 intsize
$eunicefix intsize

البته اجرای این اسکریپت از طریق یک پوسته دوباره همان اسکریپت را خروجی می دهد. اما اگر
می دویم مجموعه روی ماشینی که در آن یک INT به عنوان یک مقدار 64 بیت ذخیره می شود، config.sh اراده
تنظیم افزایش دادن به 8 و افزایش دادن اسکریپت مقدار مناسب را خواهد داشت و چاپ می کند:

در این دستگاه نوع int 8 بایت است

کدام درسته. تبریک می گویم! ما به تازگی یک پوسته اسکریپت را پیکربندی کرده ایم!!

تولید پیکربندی
اکنون می توانیم نگاهی به راه بیاندازیم پیکربندی تولید می شود از config_h.SH. ما آن را میدانیم
در حال اجرا مجموعه تولید می کند config.sh اسکریپت (چگونه دقیقاً این کار انجام می شود کاملاً مشخص نیست
مربوط به اینجا، اما برای کنجکاو، این یکی دیگر از جانشینی سند در اینجا است
مجموعه خودش). در config_h.SH خود توسط ساخته شده است متاکونفیگ همزمان
مجموعه است، مشروط بر اینکه از حداقل یک علامت C در منابع خود استفاده کنید.

بیایید به چند مورد تصادفی نگاهی بیندازیم config_h.SH فایل کنید تا ببینید واقعا چه اتفاقی می افتد:

مورد $CONFIG در
"))
if test -f config.sh; سپس TOP=.;
elif test -f ../config.sh; سپس TOP=..;
elif test -f ../../config.sh; سپس TOP=../ ..;
elif test -f ../../../config.sh; سپس TOP=../../..;
elif test -f ../../../../config.sh; سپس TOP=../../../..;
دیگر
echo "نمی توان config.sh را پیدا کرد."; خروج 1
fi
. $TOP/config.sh
;;
که C
مورد "$ 0" در
*/*) سی دی `expr X$0 : 'X\(.*\)/'` ;;
که C
echo "Extracting 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_
#define _config_h_

/* bcopy:
* اگر روال bcopy() نباشد، این نماد به memcpy نگاشت می شود
* برای کپی رشته ها در دسترس است.
*/
/* HAS_BCOPY:
* این نماد در صورتی تعریف می شود که روال bcopy() در دسترس باشد
* بلوک های حافظه را کپی کنید. شما نباید از این علامت در زیر استفاده کنید
* شرایط عادی و به جای آن مستقیماً از bcopy() استفاده کنید که
* اگر bcopy در دسترس نباشد به memcpy() نگاشت می شود.
*/
#$d_bcopy HAS_BCOPY /**/
#ifndef دارای_BCOPY است
#ifdef bcopy
#un-def bcopy
# اندیف
#define bcopy(s,d,l) memcpy((d),(s),(l)) /* نگاشت به memcpy */
# اندیف

/* HAS_DUP2:
* این علامت اگر تعریف شده باشد نشان می دهد که روال dup2 است
* برای توصیفگرهای فایل تکراری موجود است.
*/
#$d_dup2 HAS_DUP2 /**/

/* I_STRING:
* این علامت اگر تعریف شده باشد به برنامه C نشان می دهد که باید
* عبارتند از (سیستم های USG) به جای (سیستم های BSD).
*/
#$i_string I_STRING /**/

# اندیف
!GROK!این!

در بالای فایل، ساختار استاندارد .SH را که قبلاً داشتیم، تشخیص می دهیم
به تفصیل مطالعه کرد. سپس استخراج خود فایل از طریق یک سند here با
تعویض های متغیر با این حال، در اینجا ما از دشت استفاده نمی کنیم گربه اما یک SED در عوض، از آنجایی که
ما نیاز به انجام برخی ویرایش بیشتر در حین پرواز داریم. بعداً خواهیم دید که چرا، پس فراموش کنیم
در مورد آن در حال حاضر

اکنون به کامنت اصلی می‌رسیم و فایل با زمان پیکربندی برچسب گذاری شده است
سیستم هدف و غیره... (آن متغیرهایی که از منبع منبع می آیند config.sh فایل بوده اند
راه اندازی شده توسط مجموعه). پس از آن هدر نظر، یک محافظ «#ifndef» برای محافظت وجود دارد
در برابر گنجاندن چندگانه این فایل. سپس قلب پرونده می آید ...

این به آن کمک می کند $d_* و $i_* متغیرها روی یکی تنظیم شده اندتعريف كردن' یا 'ناخوشایند' توسط
مجموعهبسته به اینکه یک تابع یا یک فایل شامل در سیستم وجود دارد یا خیر
نه یعنی:

#$d_bcopy HAS_BCOPY /**/

خط به یکی از موارد زیر گسترش خواهد یافت:

#define HAS_BCOPY /**/

اگر متغیر $d_bcopy روی "define" تنظیم شده باشد یا:

#undef دارای_BCOPY است /**/

اگر $d_bcopy روی 'undef' تنظیم شده بود، زیرا ویژگی آنجا نبود. با این حال، این نیست
آنچه در آن نوشته می شود پیکربندی فایل به دلیل SED فیلتری که قبلا دیده ایم،
که شکل دوم را به صورت زیر تبدیل می کند:

/*#define HAS_BCOPY /**/

این یک فرم مفید برای ویرایش بعدی است پیکربندی زیرا فقط باید آن را حذف کنید
اگر می‌خواهید لغو کنید، «/*» پیشروی می‌شود مجموعهانتخاب به همین ترتیب، می توانید یک تک اضافه کنید
'/*' در ابتدای یک خط '#define' برای جلوگیری از تعریف یک نماد خاص.
به همین دلیل است که هر تعریف نماد با یک '/**/' پشتیبان محافظت می شود تا علامت اصلی بسته شود
نظر باز شده توسط '/*' (نظرات در C تودرتو نیستند).

اکنون تبدیل «#undef» به «/*#define» خوب است، اما اگر بخواهیم واقعاً یک
'#undef'، ما گیر کرده ایم... مگر اینکه آن را به عنوان '#un-def' بنویسیم و اجازه دهیم SED آن را به "#undef" اصلاح کنید
در حین تولید پیکربندی، که در واقع در اینجا انجام می شود.

همین نوع استدلال در مورد آن دو خط صدق می کند:

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

و با فرض config.sh تعریف می کند:

d_dup2='define'
i_string='undef'

تولید شده را وارد خواهیم کرد پیکربندی:

#define HAS_DUP2 /**/
/*#define I_STRING /**/

شفاف به عنوان آب جاری؟ خوب!

حال باید بدیهی باشد که با گنجاندن پیکربندی در تمام فایل های منبع C شما، به
می دانم چه مجموعه روی سیستم شما حدس زده است. در واقع، با استفاده از آن نمادها، شما هستید
نوشتن کد C پیکربندی شده، از آن زمان متاکونفیگ خواهد دانست که شما به آن نمادها و اراده نیاز دارید
مناسب تولید کند config_h.SH فایل و همچنین تمامی کدهای لازم در مجموعه به
یک مقدار مناسب برای آنها محاسبه کنید (با تخصیص مقادیر به متغیرهای پوسته مرتبط).

محل دویدن و پیاده روی متاکونفیگ
بیایید بر روی آن تمرکز کنیم متاکونفیگ برای مدتی برنامه ریزی کنید تا بفهمید چگونه از واحدهای خود استفاده می کند و
کد منبع خود را برای تولید تمام فایل های پیکربندی مورد نیاز. اگر قصد دارید جدید بنویسید
واحدها، شما باید درک خوبی از کل طرح داشته باشید.

اگر فایل MANIFEST.new وجود ندارد، متاکونفیگ سعی خواهد کرد به جای آن از فایل MANIFEST استفاده کند،
برای آسودگی. هر جا که به MANIFEST.new اشاره کنیم، می توان آن را به عنوان MANIFEST فهمید
به شرطی که هیچ فایل MANIFEST.new در ریشه بسته شما یافت نشود.

با فرض اینکه فایل MANIFEST.new شما به درستی تنظیم شده است و همه فایل های منبعی را که می خواهید فهرست می کند
پیکربندی، و اینکه شما اجرا کرده اید بسته بندی در دایرکتوری منبع ریشه خود برای ایجاد یک
بسته بندی فایل، ممکن است اجرا کنید متاکونفیگ و موارد زیر را دریافت خواهید کرد:

متاکونفیگ $
مکان یابی واحدهای ...
استخراج لیست های وابستگی از 312 واحد...
در حال استخراج نام فایل (*.[chyl] و *.SH) از MANIFEST.new...
ساخت فایل Wanted...
اسکن فایل‌های [chyl] برای نمادها...
اسکن فایل های .SH برای نمادها...
محاسبه گراف وابستگی بهینه...
ساخت فایل ساخت خصوصی...
تعیین واحدهای قابل بارگیری ...
در حال به روز رسانی فایل ساخت...
تعیین ترتیب صحیح واحدها...
در حال ایجاد پیکربندی...
انجام شده است.

مرحله اول به دنبال تمام فایل های واحد (با .U) در فهرست عمومی می گردد
اول، سپس در خصوصی شما. اگر یک فایل عمومی را در فهرست U خصوصی خود کپی کنید
(یعنی دایرکتوری به نام U در سطح بالای بسته شما)، عمومی را لغو می کند
نسخه هنگامی که فهرستی از تمام واحدهای موجود را داشت، آنها را تجزیه و همه را استخراج می کند
خطوط ?MAKE: برای دانستن وابستگی ها و نمادهای پوسته شناخته شده. آن را نیز
بر روی خطوط ?H: تمرکز می کند تا در مورد نمادهای C و اینکه کدام نمادهای پوسته باید باشند، بیاموزد
برای بدست آوردن یک مقدار مناسب برای نماد C محاسبه می شود (بنابراین سطح دیگری از وابستگی ها داریم
اینجا).

در مرحله بعد، نام فایل های مناسب از فایل های MANIFEST.new استخراج می شوند و a خواسته پرونده است
ساخته شده: آن فایل تمام نمادهای C و نمادهای پوسته مورد نیاز برای آن بسته را فهرست می کند. ما
ابتدا فایل های نوع C را برای علامت های C اسکن کنید، سپس وابستگی ها را به آنها منتشر کنید
نمادهای پوسته مرتبط (جمع آوری شده از خطوط ?H:). بعد فایل های .SH اسکن شده و در نهایت
تمام نمادهای پوسته شناخته شده است.

یک Makefile موقت ساخته می شود و متاکونفیگ سعی می کند ساخت همه نمادهای پوسته را ببینید
چه دستوراتی (در خط دوم ?MAKE: فهرست شده) اجرا می شوند، و بنابراین کدام واحدها هستند
واقعا مورد نیاز است واحدهای اختیاری که در غیر این صورت مورد نیاز نیستند حذف می شوند و یک Makefile دوم حذف می شود
تولید شده است. این بار، ما در مورد تمام واحدها و سفارشات مربوط به آنها، اختیاری می دانیم
واحدها حذف شده اند و مقادیر پیش فرض برای نمادهای پوسته آنها محاسبه می شود. در
مجموعه اسکریپت سپس می تواند تولید شود، همراه با config_h.SH. انجام شد.

کنوانسیون
کنوانسیون های مناسب باید رعایت شود تا کل فرآیند به درستی انجام شود. یک مورد وجود دارد
قرارداد برای واحدها و یک قرارداد نامگذاری متغیر.

همه واحدها باید حرف اول خود را با حروف کوچک داشته باشند، مگر اینکه واحدهای ویژه باشند. توسط
خاص، منظور ما این است که آنها واقعاً متغیرهای پوسته جدیدی را تعریف نمی کنند که بتوان از آنها استفاده کرد
کاربر در فایل‌های SH خود، بلکه واحدهایی که اسکریپت‌ها یا متغیرهای پوسته را تولید می‌کنند
استفاده داخلی توسط مجموعه اسکریپت نمونه های معمولی هستند Init.U فایلی که هست
مقداردهی اولیه متغیر اصلی یا Myread.U که تولید می کند myread اسکریپت تقریبا استفاده شده
همه جا در مجموعه زمانی که قرار است سوالی از کاربر پرسیده شود.

سپس واحدهای غیر خاص به دو گروه مجزا تقسیم می شوند: واحدهایی که متغیرها را تعریف می کنند
به نماد C و واحدهایی که متغیرهای پوسته را تعریف می کنند، مرتبط است. گروه اول
بیشتر در متغیرهای مربوط به شامل فایل ها (نام آنها با شروع می شود) تقسیم می شود i_) و
متغیرهای مربوط به تعاریف دیگر (نام با شروع d_). گروه دوم دارند
به عنوان مثال، نام هایی که برای خود ایستاده اند cc.U تعریف می کند $cc متغیر پوسته که مقدار آن است
کامپایلر C مورد استفاده

واحدهای ویژه گاهی اوقات خود مقداری متغیر از پیش تعریف شده را رزرو می کنند و «نتایج» را برمی گردانند.
در سایر متغیرهای شناخته شده به عنوان مثال، myread فیلمنامه تولید شده توسط Myread.U
انتظار ورود سریع را دارد $rp، پاسخ پیش فرض در dflt دلار و پاسخ کاربر را در آن قرار می دهد $ans.
این در این صفحه راهنما ثبت نشده است: شما باید بروید و به خود دستگاه نگاه کنید
درک کنید که کدام متغیرها استفاده می شوند و چگونه باید از واحد استفاده شود.

با استفاده از La واژه نامه
فایل Glossary به طور خودکار توسط براق کننده اسکریپت، که استخراج می کند
اطلاعات از ?S:، ?C: و ?MAKE: خطوط و قالب بندی مجدد آنها به صورت حروف الفبا
واژه نامه مرتب شده خواندن واژه نامه برای دانستن نمادهایی که هستید مهم است
مجاز به استفاده با این حال، واژه نامه نحوه استفاده از آنها را به شما نمی گوید. معمولاً همینطور است
به خود شما بستگی دارد

یک روز، احتمالاً واحدهای خود را خواهید نوشت و به اندازه کافی در مورد آن اطلاعات خواهید داشت متاکونفیگ
برای انجام سریع و کارآمد. با این حال، هرگز فراموش نکنید که کار خود را به درستی مستند کنید
خطوط ?S: و ?C: یا افراد دیگر قادر به استفاده مجدد از آن نخواهند بود. به یاد داشته باشید در مورد
زمانی که برای شروع فقط واژه نامه و این صفحه راهنما را داشتید.

نتیجه
حالا که میشناسی متاکونفیگ اصول اولیه، شما باید مطالعه کنید شرح بخش ، پس
پرش به منابع بخش برای یادگیری در مورد تمام جزئیات ترسناک مانند مجاز
نحو برای خطوط کنترل واحد (خطوطی که با '؟' شروع می شوند) یا دستورات MAKE متمایز
شما مجاز به استفاده هستید

منابع


این بخش مشخصات داخلی را مستند می کند متاکونفیگ، اساساً نحو واحد، خاص
واحدهایی که باید در مورد آنها بدانید و فایل های راهنمایی.

سوالات عمومی واحد نحو
یک واحد متاکونفیگ به دو بخش مجزا تقسیم می شود. بخش سرصفحه (خطوط شروع می شوند
با '؟') و یک بخش پوسته (کدی که باید در آن گنجانده شود مجموعه اسکریپت). این است
امکان افزودن نظرات "?X:" در هر نقطه از واحد، اما "?" دیگر وجود دارد. خطوط (همچنین
نام کنترل خطوط) یک خط مشی سفارش سخت داشته باشید.

اگر یک خط کنترل بیش از حد طولانی باشد، می توان با فرار از فینال از یک ادامه استفاده کرد
خط جدید با یک بک اسلش و ادامه در خط بعدی (که سپس باید تورفتگی شود
توسط فاصله ها یا برگه ها).

در زیر شرح رسمی هر یک از خطوط کنترل ارائه شده است. مگر اینکه گفته شود
در غیر این صورت، ترتیب این ارائه، ترتیب استفاده در واحد است.

?RCS: رایگان متن
برای استفاده برای نظرات RCS، در بالای واحد.

؟ایکس: هر متن
نظرات با هدف عمومی ممکن است در هر جایی از واحد ظاهر شود اما باید آن را توجیه کرد.
برای نظرات RCS، لطفاً از فرم نظر ?RCS: استفاده کنید.

?ساخت:نماد فهرست: وابستگی فهرست [+اختیاری]
این اولین خط وابستگی است. اولین نماد فهرست باید تمام نمادها را فهرست کند
ساخته شده توسط این واحد (یعنی مقدار آن توسط بخش پوسته واحد محاسبه می شود).
نمادها باید با فاصله از هم جدا شوند. اگر یک نماد تعریف شده فقط برای استفاده داخلی باشد و
نباید در تولید شده ظاهر شود config.sh فایل، پس از آن باید a قبل از آن باشد
'+' (با وابستگی های اختیاری که در ادامه تعریف می شوند اشتباه گرفته نشود). دومین
بخشی از لیست (پس از «:» وسط) وابستگی واحد است. باید همه را فهرست کند
واحدهای ویژه مورد نیاز، و همچنین تمام نمادهای مورد استفاده توسط پوسته
پیاده سازی. اگر نمادی اضافه شده باشد اما مقدار پیکربندی آن حیاتی نباشد، آن را نشان می دهد
می توان قبل از یک «+» قرار گیرد، در این صورت به آن وابستگی شرطی می گویند: آن
واحد مربوطه بارگذاری می شود اگر و تنها در صورتی که آن نماد واقعاً غیر از این باشد
تحت تعقیب؛ در غیر این صورت از مقدار پیش فرض استفاده خواهد شد.

?ساخت:برگ فرمان
ممکن است یک یا چند خط فرمان به دنبال خطوط وابستگی اولیه وجود داشته باشد. آن ها
دستورات زمانی اجرا می شوند که واحد بخواهد آنها را در آن بارگذاری کند مجموعهاست. دیدن
برای اطلاعات بیشتر پاراگراف مربوط به دستورات make. توجه داشته باشید که پیشرو برگ
کاراکتر قبل از فرمان.

?Y:طرح
یک دستورالعمل طرح بندی برای این واحد اعلام کنید. این دستورالعمل ممکن است یکی از رشته ها باشد
بالا, به طور پیش فرض or پایین (مورد مهم نیست، سبک توصیه شده این است که آنها را املا کنید
با حروف بزرگ). در صورت حذف، به طور پیش فرض فرض بر این است.

این دستورالعمل فقط در صورتی لازم است که بخواهید یک واحد را در بالا یا پایین فشار دهید
از تولید شده مجموعه اسکریپت، همانطور که وابستگی های واحد اجازه می دهد. مهم
بنابراین ممکن است سوالات در ابتدا اجباری شود. در همان کلاس چیدمان، واحدها
بر اساس حروف الفبا با دو حالت خاص برای واحدهای d_* و i_*، اجباری مرتب شده اند
به ترتیب در بالا و پایین کلاس های خود (اما این باید متعلق به
کلاس پیش فرض).

آن واحدی را که وابستگی های آن به تمام واحدهای دیگر نیاز دارد، در بالای آن قرار می دهید
قبل از آن، به هیچ چیز جالبی نمی رسید. بنابراین، آن بخشنامه واقعا باید
برای افزایش اولویت برخی از واحدهای تعاملی که به بسیاری از آنها وابسته نیستند استفاده شود
سایر نمادهای قابل مشاهده برای کاربر، مانند سؤالات مربوط به مسیر.

?S:نماد_نام [(منسوخ نماد فهرست)]:
نماد پوسته را معرفی می کند. این خط اول نماد را نامگذاری می کند و به صورت اختیاری با a دنبال می شود
لیستی که بین پرانتز قرار می گیرد و معادل منسوخ شده است. آنهایی که منسوخ شده اند
نمادها دوباره به نماد جدید تبدیل خواهند شد نماد_نام اگر -o گزینه داده شده است
متاکونفیگ.

?S:هر متن، برای واژه نامه
اساسا یک نظر توصیف کننده نماد پوسته است که توسط استخراج خواهد شد براق کننده
در فایل واژه نامه

?S:. نظر نماد پوسته را می بندد.

?C:نماد_نام [~ نام مستعار] [(منسوخ نماد فهرست)]:
نماد C جدید را معرفی می کند. در نام مستعار name نامی است که نماد C تحت آن قرار می گیرد
کنترل شود، یعنی اگر نام مستعار نماد مورد نظر است، سپس آن نماد C نوشته می شود
در config_h.SH فایل. معمولاً نام مستعار فقط '%<' است (مخفف نام واحد)
و همچنین یک خط ?W: نگاشت یک نماد C به نام مستعار. همچنین قطعات مربوطه
خطوط ?H: به صراحت توسط یک شرط "?%<" محافظت می شوند. نماد را ببینید
برای جزئیات بیشتر، پاراگراف مستعار باقیمانده خط اختیاری است
منسوخ نماد فهرست، که معادل های قدیمی را برای جدید فهرست می کند نماد_نام.

?C:هر متن، برای واژه نامه و config_h.SH
اساسا یک نظر توصیف کننده نماد C، که توسط استخراج خواهد شد براق کننده
به فایل واژه نامه و توسط متاکونفیگ به config_h.SH فایل اگر نماد است
خواسته (یا اگر نام مستعار آن هنگام استفاده از نام مستعار نماد مورد نظر باشد).

?C:. نظر نماد C را می بندد.

?H:?نماد:config_h.SH چیز
این درخواست درج کلی در است config_h.SH. خط فقط زمانی نوشته می شود
نگهبانی نماد واقعا تحت تعقیب است این شکل کلی زمانی مورد نیاز است که نماد C باشد
aliasing استفاده شد. در غیر این صورت، اگر از یکی از فرم‌های «استاندارد» دیگر استفاده کنید،
نگهبانی به طور خودکار توسط متاکونفیگ خود.

?H:#$d_var VAR "$var"
به صورت مشروط تعریف می کند VAR نماد C به $var چه زمانی روی ' تنظیم شده استتعريف كردن'. دلالت بر الف دارد
'?VAR:' وضعیت نگهبانی و متاکونفیگ به طور خودکار پیوند می دهد VAR به دو پوسته آن
وابستگی های متغیر (یعنی هر دو $d_var و $var به عنوان پرچم گذاری خواهد شد خواسته if VAR is
استفاده شده در منابع C).

?H:#تعریف VAR [اختیاری متن]
همیشه تعریف می کند VAR نماد C به مقداری مقدار. دلالت بر یک '؟VAR:' شرایط نگهبانی
یک وابستگی پوسته خودکار به خود واحد ایجاد می شود.

?H:#تعریف VAR(x,y,z) $var
همیشه ماکرو را تعریف می کند VAR به ارزش $var متغیر. به عهده دارد
واحد برای اطمینان $var ارزش معقولی دارد یک وابستگی خودکار بین C
درشت دستور VAR و متغیر پوسته ایجاد می شود و کل خط توسط یک محافظت می شود
ضمنی '؟VAR:'.

?H:#$d_var VAR
مشروط تعریف می کند VAR if $d_var تنظیم شده استتعريف كردن'. دلالت بر یک '؟VAR: نگهبانی
وضعیت. یک وابستگی پوسته خودکار به سمت ایجاد می شود $d_war.

?H:#تعریف VAR "$var"
یک مقدار پیکربندی شده را به VAR نماد C. دلالت بر یک '؟VAR:' وضعیت گورادینگ.
یک وابستگی پوسته خودکار برای پیوند ایجاد می شود VAR و $var.

?H:. را می بندد config_h.SH درخواست های گنجاندن

?M:C نماد: C وابستگی
تعریف جادویی را در مورد نماد C، برای confmagic.h، و تعریف می کند
نماد نگهبانی برای تعاریف باقی مانده ?M:. این خط در سکوت دلالت دارد
'?W:%<:C نماد'، یعنی اگر نماد C ظاهر شود، واحد در Configure بارگذاری می شود
در منابع C، چه از جادو استفاده شود یا نه. وابستگی های C فعال می شوند
وقتی از سحر و جادو استفاده می شود، به منظور تحمیل تعریف آنها config_h.SH. اما اگر
جادو است نه استفاده می شود اما نماد C در منبع بدون C مورد نیاز ظاهر می شود
وابستگی ها، هر بار که فایل Wanted ساخته می شود به شما هشدار داده می شود، زیرا ممکن است اینطور باشد
مشکل قابل حمل (و همچنین به این دلیل که واحد بدون قید و شرط در آن بارگذاری شده است
هر زمان که از نماد C استفاده می شود، بدون توجه به خطوط دیگر ?C: از آن، پیکربندی کنید
واحد).

?M:cpp دفاع می کند
نگاشت cpp جادویی را برای معرفی در confmagic.h هر زمان که مربوط می شود، تعریف می کند
نماد استفاده می شود. یک تلویحی وجود دارد؟همزادنگهبانی از کجا همزاد نام نماد است
توسط خط پیشرو ?M: تعریف شده است.

?M:. را می بندد confmagic.h درخواست گنجاندن

?W:صدف نماد فهرست:C نماد فهرست
سرنوشت نمادهای پوسته را با نمادهای C پیوند می دهد: اگر هر یک از C
نمادهای لیست شده مورد نظر هستند، سپس تمام نمادهای پوسته به عنوان خواسته علامت گذاری می شوند. مفید برای
گنجاندن اجباری یک واحد (فهرست نمادهای پوسته روی '%<' تنظیم شده است) در صورت وجود مقداری C
نماد شناسایی می شود لیست نمادهای پوسته ممکن است خالی بماند تا از کنار آن بهره مند شوید
اثر مکان نماد C در پیش پردازنده داخلی (نماد مشخص
برای آن پیش پردازنده اگر در منبع قرار داشته باشد). برای جستجوی الگوهای دارای فاصله
در آنها، شما باید نمادهای C را در داخل نقل قول های ساده نقل قول کنید، همانطور که در 'struct
منطقه زمانی'.

?V:فقط خواندنی نمادها:بخوان-بنویس نمادها
این یک متالنت اشاره و باید فقط در واحدهای ویژه صادر کننده پوسته استفاده شود
متغیرها متغیرهای قبل از وسط ":" فقط خواندنی صادر می شوند (تغییر آنها
یک اخطار صادر خواهد کرد)، در حالی که سایر نمادها ممکن است آزادانه خوانده و تغییر کنند.

?F:فایل ها ایجاد شده
این خط دو هدف را دنبال می کند: الف متالنت اشاره، و همچنین یک مکان نگهدار برای
آینده jmake استفاده کنید. باید سه نوع فایل را فهرست کند: فایل موقت که هستند
برای آزمایش ایجاد شد، UUهای خصوصی برای بعد در فهرست UU ایجاد شدند
مطالعه، و موارد عمومی باقی مانده در دایرکتوری ریشه بسته. موقت
فایل ها باید با یک «!» قبلی فهرست شوند. شخصیت (به معنی "نه! آنها دوباره استفاده نمی شوند
بعد!")، فایل های UU خصوصی باید قبل از "./" (به معنی: برای استفاده از آنها، بگویید
./فایل، نه فقط پرونده، و عمومی ها باید همانطور که هست نامگذاری شوند.

?T:صدف موقت
دیگر متالنت اشاره این خط همه متغیرهای پوسته استفاده شده به عنوان موقت را فهرست می کند
در بخش پوسته این واحد.

?D:نماد='ارزش'
مقدار اولیه برای نمادهایی که به عنوان وابستگی های شرطی استفاده می شوند. اگر نه ?D: خط است
پیدا شد، سپس یک مقدار null به جای آن استفاده می شود. در متالنت برنامه به شما هشدار می دهد اگر a
نماد حداقل یک بار به عنوان یک وابستگی شرطی استفاده می شود و دارای یک وابستگی مناسب نیست
?D: مقداردهی اولیه. این تمرین خوبی است که آن خطوط را حتی به صورت تهی اضافه کنید
مقداردهی اولیه زیرا بر ماهیت احتمالاً اختیاری یک نماد تأکید می کند.

?O:هر پیام شما می خواهم
این دستورالعمل نشان می دهد که این واحد به طور کلی منسوخ شده است. هر زمان استفاده از هر
از نمادهای آن ساخته شده است (یا استفاده غیرمستقیم از طریق وابستگی ها)، پیام در خروجی است
صفحه نمایش (در stderr). شما می توانید یک یا چند خط دیگر قرار دهید، در این صورت هر خط می تواند
به ترتیب چاپ شود

?LINT:متالنت نکات
مشاهده متالنت صفحه دستی برای توضیح نکات متمایز که می تواند باشد
استفاده شده.

?INIT:مقدار دهی اولیه رمز
کد اولیه مشخص شده توسط این خط در بالای صفحه بارگذاری می شود
مجموعه اسکریپت به شرطی که واحد مورد نیاز باشد.

C آیکون مضطرب کردن
گاهی اوقات نمی توان به آن اعتماد کرد متاکونفیگانتخاب پیش فرض خود برای config_h.SH
نظرات و تعریف نماد C. اینجاست که aliasing وارد عمل می شود. از آنجایی که نه
توضیح دادن مشکل است، ما یک مثال را برای درک مکانیسم اساسی مطالعه خواهیم کرد.

واحد d_const.U سعی می کند تعیین کند که آیا کامپایلر C شما در مورد آن اطلاعات دارد یا خیر طراح
کلمه کلیدی. اگر اینطور نیست، می‌خواهیم آن کلمه کلیدی را به یک رشته تهی بازنگری کنیم تا به آن اجازه دهیم
کامپایل برنامه علاوه بر این، ما می خواهیم به طور خودکار تست را زمانی که طراح کلمه
استفاده می شود.

در اینجا بخش های مربوط به واحد d_const.U آمده است:

?MAKE:d_const: cat cc ccflags Setvar
?MAKE: -انتخاب اضافه کردن $@ %
?S:d_const:
?S: این متغیر به صورت شرطی نماد HASCONST را تعریف می کند که
?S: به برنامه C نشان می دهد که این کامپایلر C در مورد آن می داند
?S: نوع const.
?S:.
?C:HASCONST ~ %<:
?C: این نماد، اگر تعریف شده باشد، نشان می دهد که این کامپایلر C در مورد آن می داند
?C: نوع const. نیازی به آزمایش واقعی آن نماد نیست
?C: در برنامه های شما. صرف استفاده از کلمه کلیدی "const" خواهد بود
?C: آزمایش های لازم را آغاز کنید.
?C:.
?H:?%<:#$d_const HASCONST /**/
?H:?%<:#ifndef HASCONST
?H:?%<:#define const
?H:?%<:#endif
?H:.
?W:%<:const
?LINT:تنظیم d_const
?LINT: const شناخته شده
: کلمه کلیدی const را بررسی کنید
اکو ""
echo 'بررسی اینکه آیا کامپایلر C شما از "const" اطلاع دارد...' >&4
/bin/cat >const.c <<'EOCP'
اصلی ()
{
const char *foo;
}
EOCP
اگر $cc -c $ccflags const.c >/dev/null 2>&1 ; سپس
val = "$define"
پژواک "بله، درست است."
دیگر
val = "$undef"
echo "نه، اینطور نیست."
fi
d_const را تنظیم کنید
eval $setvar

ابتدا متوجه استفاده از یک خط ?W: می‌شویم که اساساً می‌گوید: «این واحد زمانی مورد نیاز است
طراح کلمه کلیدی در یک فایل C استفاده می شود." به منظور بازنگری مشروط طراح به صفر
رشته در پیکربندی، من تعریف شرطی را انتخاب کردم HASCONST از طريق $d_const.

با این حال، این یک مشکل ایجاد می کند، زیرا HASCONST نماد قرار نیست در استفاده شود
منابع، فقط طراح نشانه است. و ?H: تعیین خط HASCONST به طور ضمنی است
محافظت شده توسط '?HASCONST'. بنابراین، ما باید محدودیت صریح '?%<' را برای گفتن اضافه کنیم
متاکونفیگ که آن خطوط باید در آن گنجانده شود config_h.SH هر زمان که نماد '%<'
تحت تعقیب قرار می گیرد (%< در اینجا به نام واحد اشاره دارد d_const).

این تقریباً کامل است، زیرا خط ?W: می خواهد d_const هر زمان که طراح استفاده می شود، سپس
خطوط ?H: شامل می شود config_h.SH فایل. با این حال، نظر اصلی (?C:
خطوط) متصل به HASCONST خود نیز از طریق محافظت می شود HASCONST، یعنی یک امر ضمنی دارد
محدودیت '?HASCONST'. از این رو نیاز به بیگانگی la HASCONST نماد به '%<'.

بخش باقی مانده از واحد (قسمت پوسته) واقعاً ساده است. آن را به سادگی
سعی می کند یک نمونه برنامه C را با استفاده از کامپایل کند طراح کلمه کلیدی. اگر می تواند، پس می شود
تعريف كردن $d_const از طریق $setvar تابع (تعریف شده توسط Setvar.U واحد). پاراگراف را ببینید
در مورد واحدهای ویژه برای جزئیات بیشتر

ساخت دستورات
در خط فرمان ?MAKE: می‌توانید یک فرمان پوسته بنویسید تا همانطور که هست یا یک دستور اجرا شود.
ویژه -انتخاب فرمانی که توسط متاکونفیگ و تجزیه شد تا ببیند چه چیزی باید باشد
انجام شده. "-" پیشرو فقط برای جلوگیری وجود دارد ساخت از شکست در هنگام بازگشت فرمان
یک وضعیت غیر صفر -- واقعاً مورد نیاز نیست زیرا ما از ' استفاده می کنیمساخت -nبرای حل و فصل
وابستگی ها، اما به شما توصیه می کنم در صورت اجباری شدن در نسخه های بعدی آن را حفظ کنید.
نحو از انتخاب کنید دستور این است:

-انتخاب CMD $@ target_file

جایی که $@ ماکرو استاندارد در Makefiles است که برای هدف فعلی (نام
واحد در حال ساخت، با حذف نهایی .U). در CMD بخشی است
واقعی متاکونفیگ فرمان اجرا شود و target_file پارامتر دیگری است که
تفسیر بستگی به CMD خود همچنین پسوند نهایی .U خود را حذف کرده است و
معمولاً به یک فایل واحد اشاره می کند، مگر اینکه با './' شروع شود که در این صورت به یکی ارجاع می دهد
از متاکونفیگ فایل های کنترلی در '.MT دایرکتوری.

دستورات موجود عبارتند از:

اضافه می کند target_file به مجموعه.

add.Config_sh
آن قسمت را پر می کند مجموعه تولید config.sh فایل. فقط استفاده شده
متغیرها اضافه می شوند، متغیرهای شرطی (از وابستگی های شرطی) هستند
رد شد

add.Null بخشی را اضافه می کند که تمام متغیرهای پوسته مورد استفاده را به یک رشته خالی مقداردهی اولیه می کند.

c_h_weed تولید می کند config_h.SH فایل. فقط خطوط لازم چاپ شده است.

cm_h_weed تولید می کند confmagic.h فایل. فقط خطوط لازم چاپ شده است. این
فرمان تنها زمانی فعال می شود که -M سوئیچ داده می شود، یا زمانی که a confmagic.h پرونده
همین الان هم وجود داره.

بستن.Config_sh
نماد نهایی "EOT" را به تنهایی روی یک خط اضافه می کند تا سند اینجا پایان یابد
ساخت تولید config.sh فایل.

prepend محتوای هدف را به target_file اگر آن فایل خالی نباشد

weed واحد را به مجموعه مانند اضافه کردن دستور دهید، اما چند آزمایش اضافی انجام دهید
برای حذف '؟نماد' و '%نماد' خطوط از target_file اگر نماد
تحت تعقیب یا مشروط نیست. فرم '%' فقط به صورت داخلی توسط
متاکونفیگ در حالی که فایل های U. خود را در '.MT' فهرست راهنما.

پاک کردن همان اضافه کردن واقعا، اما یک جایگزین ماکرو اضافی انجام می دهد. در
ماکروهای موجود در متصل شده ماکرو بند

به عنوان یک یادداشت فرعی ، متاکونفیگ تولید می کند -کنترل دستور داخلی برای مقابله با شرطی
وابستگی ها شما نباید خودتان از آن استفاده کنید، اما در صورت اسکن آن را خواهید دید
تولید makefile در .MT دایرکتوری.

متصل شده ماکرو
ماکروهای زیر توسط پاک کردن فرمان و جایگزین قبل از گنجاندن در
مجموعه:

شماره تجدید نظر پایه بسته، مشتق شده از بسته بندی.

تاریخ فعلی.


آدرس ایمیل نگهدارنده این بسته برگرفته از شما
بسته بندی.


نام بسته، همانطور که از شما گرفته شده است بسته بندی فایل.


سطح پچ از متاکونفیگ برنامه (منسوخ شده به نفع ).


سطح بازبینی SVN از متاکونفیگ برنامه است.

شماره نسخه از متاکونفیگ برنامه است.

این ماکروها عمدتاً برای شناسایی استفاده می شوند متاکونفیگ نسخه ای که a را ایجاد کرد
ویژه مجموعه اسکریپت و برای کدام پکیج انجام شده است. آدرس پست الکترونیکی
نگهدارنده در دستورالعمل های اصلی که مجموعه هنگام شروع چاپ می شود.

اخیر متاکونفیگ نسخه ها نحو بسیار کلی تری از فرم را درک می کنند:

<$variable>

که در زمان Configure-generation با مقدار جایگزین می شود متغیر از شما گرفته شده
بسته بندی فایل. در نهایت، قالب ماکرو سیم‌کشی قدیمی ناپدید می‌شود و <$baserev>
جایگزین خواهد شد در تمامی واحدهای عرضه شده

ویژه واحد
واحدهای ویژه زیر برای فاکتورسازی کد و ارائه سطح بالاتر استفاده می شوند
قابلیت ها آنها یا یک پوسته اسکریپت تولید می کنند که می تواند منبع باشد یا یک پوسته
متغیری که می تواند باشد ارزیابیاد. انتقال پارامتر نیز از طریق متغیرهای شناخته شده انجام می شود
با نام یا ناشناس مانند $1، $2، و غیره ... (که می تواند به راحتی از طریق پوسته تنظیم شود تنظیم
اپراتور). چه زمانی مجموعه اجرا می کند، ایجاد می کند و به a می رود UU دایرکتوری، بنابراین هر
اسکریپت تولید شده در آنجا قرار دارد و با فایل های بسته شما تداخلی ندارد.

در اینجا واحدهای جداگانه ای که باید در مورد آنها بدانید و روش استفاده از آنها آورده شده است.

Cppsym.U
این واحد یک پوسته اسکریپت به نام تولید می کند Cppsym، که می توان از آن برای تعیین استفاده کرد
آیا هر نماد در یک لیست توسط پیش پردازنده C یا کامپایلر C شما تعریف شده است
مشخص شده. این می تواند وضعیت هر نماد را تعیین کند، اگرچه نمادهای موجود در آن
(فهرست ویژگی ها) راحت تر تعیین می شوند.

Csym.U
این متغیر پوسته $csym را تنظیم می‌کند که در داخل مورد استفاده قرار می‌گیرد مجموعه برای بررسی اینکه آیا الف
نماد C داده شده تعریف شده است یا خیر. یک استفاده معمولی این است:

نتیجه نماد را تنظیم کنید [-fva] [قبلی]
ارزش $csym

که تنظیم خواهد شد نتیجه اگر تابع [-f]، متغیر [-v] و یا
آرایه [-a] تعریف شده است، در غیر این صورت 'نادرست'. اگر مقدار قبلی داده شود و -r
سوئیچ به ارائه شد مجموعه (نگاه کنید به مجموعه گزینه پاراگراف)، سپس آن
ارزش مجدداً بدون سؤال استفاده می شود.

نحوه انجام این محاسبه بستگی به پاسخی دارد که کاربر به سؤال می دهد
مجموعه در مورد اینکه آیا باید یک را انجام دهد می پرسد nm استخراج یا نه اگر
استخراج انجام شد، واحد به سادگی از طریق لیست نمادها نگاه می کند، در غیر این صورت
تست پیوند کامپایل را انجام می دهد، مگر اینکه -r برای استفاده مجدد از محاسبه قبلی داده شد
ارزش طبیعتا...

پایان.U
با کپی کردن این واحد در خصوصی خود U دایرکتوری و الحاق وابستگی ها به
?MAKE: خط، شما می توانید یک واحد معین را مجبور کنید که در آن بارگذاری شود مجموعه حتی اگر نباشد
در غیر این صورت خواسته برخی از واحدها ممکن است فقط به اجبار وارد شوند مجموعه اینطوری

Filexp.U
این واحد یک اسکریپت پوسته تولید می کند filexp که نام فایل ها را با شروع گسترش می دهد
جزر و مد یک استفاده معمولی این است:

exp_name=`./filexp $name`

برای اختصاص دادن نام فایل گسترش یافته در exp_name.

Findhdr.U
این واحد تولید می کند findhdr اسکریپتی که برای مکان یابی فایل های هدر در آن استفاده می شود
$ usrinc یا مکان های غریبه دیگر با استفاده از قابلیت های cpp. به فیلمنامه داده می شود
شامل نام پایه فایل مانند 'stdio.h' یا 'sys/file.h' باشد و مسیر کامل را برمی گرداند.
فایل inlcude و یک وضعیت صفر در صورت یافتن، یا یک رشته خالی و یک وضعیت غیر صفر
اگر فایل نمی تواند پیدا شود.

Getfile.U
این واحد مقداری کد پوسته تولید می کند که برای دریافت فایل باید منبع آن باشد
نام ببرید و چند بررسی سلامت عقل انجام دهید. به صورت اختیاری، یک بسط ~name انجام می شود.

برای استفاده از این واحد، $rp و dflt دلار باید سوال و پاسخ پیش فرض را نگه دارد که
همانطور که هست به myread اسکریپت (آینده را ببینید Myread.U). $fn
متغیر عملیات را کنترل می کند و نتیجه به آن باز می گردد $ans.

برای پیدا کردن یک فایل یا دایرکتوری، «f» یا «d» را در آن قرار دهید f~/. اگر یک '~' ظاهر شد، سپس ~name
تعویض مجاز است اگر یک '/' ظاهر شود، فقط مسیرهای مطلق پذیرفته می شوند و
جایگزین های ~name همیشه قبل از بازگشت گسترش می یابند. اگر «+» مشخص شده باشد،
بررسی وجودی نادیده گرفته می شود. اگر "n" در داخل ظاهر شود $fn، سپس کاربر مجاز است
پاسخ "هیچ"

معمولاً، مگر اینکه شما برای حمل و نقل درخواست کرده باشید، ~ جایگزینی نام رخ می دهد زمانی که درخواست می شود.
با این حال، مواقعی وجود دارد که می خواهید قابلیت حمل را دور بزنید و آن را مجبور کنید
جایگزینی برای انجام این کار می توانید از حرف "e" (بسط) استفاده کنید.

اگر از نوع خاص 'l' (مکان) استفاده شود، $fn متغیر باید با ":" پایان یابد،
به دنبال آن یک نام پایه فایل. اگر پاسخ یک دایرکتوری باشد، نام پایه فایل خواهد بود
قبل از آزمایش وجود فایل اضافه شده است. این در سوالات به سبک مکان یابی مفید است
مثل این:

dflt='~news/lib'
: وقتی از l استفاده می شود نیازی به مشخص کردن «d» یا «f» نیست
fn='l~:active'
rp='فایل فعال کجاست؟'
. ./getfile
فعال = "$ans"

بعلاوه، حرف "p" (مسیر) ممکن است همراه با "l" برای گفتن استفاده شود
دریافت فایل که پاسخی بدون «/» در آن باید پذیرفته شود، با این فرض که چنین شود
در زمانی که این مقدار مورد نیاز است، در PATH همه باشد.

همچنین امکان تعیین لیستی از پاسخ هایی که باید پذیرفته شوند مفید است
کلمه به کلمه، دور زدن همه چک ها. این لیست باید داخل پرانتز و موارد باشد
باید با کاما از هم جدا شوند، بدون فاصله. نقل قول را فراموش نکنید
رشته حاصل از آنجایی که پرانتزها برای پوسته معنی دارند. برای مثال:

dflt='/bin/install'
fn='/fe~(install,./install)'
rp='از کدام برنامه نصب استفاده کنم؟'
. ./getfile
install="$ans"

به کاربر اجازه می دهد فقط مسیرهای کاملا واجد شرایط را با مراجعه به فایل های موجود مشخص کند،
اما همچنان پاسخ‌های ویژه «نصب» و «./نصب» را همانطور که هست (با فرض اینکه
البته بعداً از آنجایی که آنها این کار را انجام می دهند، چیزی با آنها به ویژه در زنجیره بعدی برخورد خواهد کرد
با چارچوب کلی مورد انتظار مطابقت ندارد).

اگر پاسخ سوال 'هیچک' باشد، بررسی وجودی نادیده گرفته می شود و
رشته خالی برگردانده می شود. توجه داشته باشید که از زمان دریافت فایل تماس myread داخلی، همه
ویژگی های موجود با myread درخواست اینجا به.

اگر یک مقدار کاملاً گسترش یافته مورد نیاز است (به عنوان مثال در Makefile)، می توانید از آن استفاده کنید
la $anexp متغیری که همیشه توسط آن به درستی تنظیم می شود دریافت فایل به عنوان گسترش یافته است
نسخه $ans. البته، اگر به آن اجازه ندهید، ~name گسترش نخواهد یافت
مقام اول در $fn متغیر.

Inhdr.U
این واحد تولید می کند $inhdr متغیر پوسته، استفاده داخلی توسط مجموعه برای بررسی
آیا مجموعه ای از هدرها وجود دارد یا خیر. یک استفاده معمولی این است:

تنظیم هدر i_header [ header2 i_header2 ... ]
eval $inhdr

این یک پیام را چاپ می کند که می گوید آیا هدر پیدا شده است یا نه و تنظیم می کند
i_header بر این اساس متغیر است. اگر بیش از یک هدر مشخص شده باشد و اولی
هدر یافت نشد، هدر بعدی را امتحان می کنیم، تا زمانی که لیست خالی شود یا یکی پیدا شود.

Inlibc.U
این واحد تولید می کند $inlibc متغیر پوسته، استفاده داخلی توسط مجموعه برای بررسی
آیا یک تابع C معین تعریف شده است یا خیر. یک استفاده معمولی این است:

تابع d_func را تنظیم کنید
eval $inlibc

این یک پیام را چاپ می کند و می گوید که آیا تابع پیدا شده است یا نه و تنظیم شده است
$d_func بر این اساس. در داخل از آن استفاده کرد $csym معمولی

Loc.U
این واحد مهم یک اسکریپت پوسته تولید می کند LOC که می توان از آن برای یافتن مکان استفاده کرد
در لیستی از دایرکتوری ها یک فایل داده شده نهفته است. آرگومان اول فایل به را مشخص می کند
باشد، آرگومان دوم این است که در صورت شکست جستجو چه چیزی برگردانده می شود، و
آرگومان های reaming لیستی از دایرکتوری هایی هستند که فایل باید در آنها جستجو شود. برای
نمونه، مثال:

dflt=`./loc sendmail.cf X / usr / معاونت /var/lib/sendmail / lib`

تنظیم می کرد dflt دلار به X اگر نه sendmail.cf فایل در زیر فهرست های فهرست شده یافت شد،
یا چیزی شبیه به /usr/lib/sendmail.cf در برخی از سیستم ها همچنین ببینید Getfile.U.

MailAuthor.U
این واحد برای ساخت باید در خط ?MAKE: End.U خصوصی شما قرار گیرد
آن را به مجموعه. این به کاربر پیشنهاد می دهد که به صورت اختیاری خود را در نویسنده ثبت کند
مطلع شدن از ورود وصله های جدید یا دریافت خودکار آنها هنگام صدور.
شما باید نصب کنید مامور پستی برای انجام این کار (حداقل نسخه 3.0).

MailList.U
این واحد برای ساخت باید در خط ?MAKE: End.U خصوصی شما قرار گیرد
آن را به مجموعه. این به کاربر پیشنهاد می دهد تا در یک لیست پستی مشترک یا لغو اشتراک کند
جایی که بحث مربوط به بسته در حال انجام است. شما باید بدوید بسته بندی
و به سوالات مربوط به لیست پستی پاسخ دهید تا متغیرهای مناسب را در خود تنظیم کنید
بسته بندی قبل از اینکه این واحد عملیاتی شود.

Myinit.U
این واحد را در قسمت خصوصی خود کپی کنید U دایرکتوری برای اضافه کردن مقادیر پیش فرض خود به برخی
متغیرهای داخلی این واحد در بارگذاری می شود مجموعه بعد از همه پیش فرض
اولیه سازی انجام شده است.

Myread.U
این واحد تولید می کند myread اسکریپت پوسته ای که برای انجام یک باید منبع شود
خواندن. این اجازه می دهد تا فرار پوسته، تخصیص پیش فرض و ارزیابی پارامتر، به عنوان
مستند در واحد Instruct.U. همچنین اجازه می دهد تا تنظیمات پویا از -d گزینه،
که برای باقی مانده اجرای اسکریپت استفاده خواهد شد.

برای استفاده از این واحد، $rp باید سوال را نگه دارد و dflt دلار باید شامل پیش فرض باشد
پاسخ. سوال توسط خود اسکریپت چاپ می شود و نتیجه برگردانده می شود
در $ans متغیر.

در اینجا یک استفاده معمولی وجود دارد:

dflt='y'
rp='سوال؟'
. ./myread
ارزش = "$ans"

برای اطلاعات بیشتر به خود واحد مراجعه کنید.

Oldconfig.U
هنگامی که برخی از واحدهای شما تلاش می کنند، این واحد باید بخشی از خط وابستگی ?MAKE: شما باشد
برای استفاده مجدد از یک مقدار نماد قدیمی این واحد وظیفه دریافت پاسخ های قدیمی را بر عهده دارد
از جانب config.sh یا ارائه نکات مفید هنگام اجرا بر روی یک پلت فرم معین برای
بار اول. را ببینید مجموعه نکات پاراگراف برای اطلاعات بیشتر در مورد نکات.

پیشوند.U
هدف این واحد تشخیص تغییرات در فهرست پیشوند نصب است
پیش فرض های مناسب به طور خودکار از پاسخ های قبلی را مجدداً محاسبه کنید. متکی بر آن است
ارزش $oldprefix متغیری که دایرکتوری پیشوند قبلی را نگه می دارد
تغییر کرده و در غیر این صورت خالی است. به عنوان مثال، اگر پیشوند از تغییر کرده باشد / انتخاب به
/ usr / محلی، سپس دایرکتوری نصب باینری قبلی از آن تغییر خواهد کرد
/opt/bin به / usr / local / bin، یا اگر بود، مثلاً بدون تغییر باقی می ماند، / صندوقچه.

باید زنگ بزنی تنظیم قبل از صدور یک ارزیابی on پیشوند $، از قبیل:

تنظیم dflt var [dir]
eval $پیشوند

که تنظیم خواهد شد dflt دلار به $var or $پیشوند/dir بسته به اینکه پیشوند باقی بماند یا خیر
یکسان یا نه اگر دیر رشته است هیچ، یک مقدار فاصله واحد در dflt دلار به عنوان نگهداری می شود -
است، حتی زمانی که پیشوند تغییر می کند. اگر دیر حذف شده است، پس dflt دلار روی خالی تنظیم شده است
رشته اگر پیشوند تغییر کرد، به $var در غیر این صورت.

Prefixup.U
هدف این واحد مشابه Prefixit.U است، یعنی به رفع مشکل کمک می کند.
رشته پیش فرض برای تطبیق با تغییرات پیشوند. با این حال، متغیر پوسته پیشوند $,
در صورت ارزیابی، فقط بسط های ~name را بازیابی می کند، در صورتی که پیشوند از چنین فراری استفاده کند
سازوکار. از آن به عنوان استفاده کنید:

dflt را تنظیم کنید
eval $ prefixup

قبل از درخواست از طریق دریافت فایل برای مثال. اگر پیشوند از ~name استفاده نمی کند
توسعه، پس از آن موارد بالا بدون عملیات خواهد بود y متغیر، طبیعتا

Typedef.U
این واحد تولید می کند $typedef متغیر پوسته، استفاده داخلی توسط مجموعه برای بررسی
نوع دف وجود دارد یا خیر. یک استفاده معمولی این است:

تنظیم typedef val_t پیش فرض [ شامل ]
eval $typedef

این متغیر را تنظیم می کند val_t به ارزش به طور پیش فرض اگر typedef پیدا نشد
در میان لیست شامل فایل ها، یا به typedef اگر پیدا شد در صورت عدم شامل فایل ها هستند
مشخص شده، واحد به داخل نگاه می کند فقط. فقط اگر تعدادی شامل را مشخص کنید
به آنها نگاه می شود

Unix.U
هدف این واحد تعریف برخی از رایج‌ترین یونیکس‌ها از طریق متغیرها است
که می توان آن را از خط فرمان یا از طریق فایل های راهنمایی مناسب تغییر داد. به خصوص،
$_exe, $_o و $_a تنظیم شده اند. کلیه واحدها باید به آن مراجعه کنند $_o و نه .o به طور مستقیم.
'.' بخشی از این متغیرها است.

Setvar.U
این واحد متغیری را تولید می کند که به صورت داخلی توسط مجموعه برای تنظیم یک
تعريف كردنمقدار /undef برای یک نماد داده شده، هنگامی که ناگهان تغییر می کند یک هشدار منتشر می کند
از یک مقدار قبلی برای مثال:

val = "$define"
d_variable را تنظیم کنید
eval $setvar

اگر قبلی $d_variable مقدار غیر تهی بود و $val متفاوت است، "اووو"
اخطار صادر می شود.

اوه.یو
این واحد تولید می کند هه اسکریپت، که زمانی که ارزش در متغیر
که نام آن است $var با مقدار قبلی قبلی آن یکی نیست $ بود. بر
برگشت، $ td و $tu مقدار مناسب را نگه دارید تعريف كردن or ناخوشایند متغیر دیدن
نمونه ها در Inlibc.U.

ساخته شده پیش پردازنده
هر واحدی که باید در آن گنجانده شود مجموعه از طریق یک پیش پردازنده داخلی اجرا می شود. قبل از
عبارات پردازنده با کاراکتر '@' معرفی می شوند ('#' نظر پوسته است
شخصیت). این فقط مانند پیش پردازنده C عمل می کند، اما اجازه می دهد برای پوسته و perl
فرار می کند. در اینجا توابع موجود است:

@if بیان
If بیان درست است، بارگیری کد را تا @end، @elsif یا @else ادامه دهید.

@elsif بیان
انتخاب جایگزین اگر بیان درست است، بارگیری کد را تا پایان @ ادامه دهید،
یک @elsif یا @else دیگر.

@else کد پیش‌فرض برای بارگیری اگر @if باشد بیان دروغ بود و هیچ کدام
اختیاری @elsif مطابقت دارد. تا پایان @ بارگیری کنید.

@end عبارت بارگذاری شرطی که توسط @if باز شده را ببندید.

@تعريف كردن نماد
به پیش پردازنده می گوید که نماد از این به بعد تعریف شده است.

مشروط بیان می تواند شامل نام نمادها باشد (اگر نماد مورد نظر باشد یا مقدار درست است
تعریف شده از طریق @تعريف كردن یا پوسته/پرل فرار می کند. آن اتم ها را می توان با استفاده از
عملگرهای بولین سنتی '!' برای نفی، "&&" برای منطقی و، و "||" برای منطقی
یا.

متن محصور شده در یک براکت یک تست پوسته است، در حالی که متن بین براکت های دوتایی تست است
یک تست پرل یعنی عبارات:

{ صدف متن }
{{ پرل متن }}

ترجمه می شوند:

if صدف متن >/dev/null 2>&1; سپس از 0 خارج شوید؛ دیگری خروجی 1; فی
اگر (پرل متن) {خروج 0;} else {خروج 1;}

و وضعیت خروج به روش استاندارد برای بدست آوردن یک مقدار بولی استفاده می شود، یعنی 0 درست است و
همه چیز دیگر دروغ است توجه داشته باشید که فقط شرایط ساده را می توان در perl بیان کرد، تا
برخی از کدهای پیچیده را می توان در داخل بارگذاری کرد متاکونفیگ و اجرا شد.

از پیش پردازنده داخلی می توان برای تنظیم دقیق برخی از واحدها استفاده کرد (نگاه کنید به d_gethname.U برای
مثال پیچیده) بسته به نمادهایی که واقعاً توسط برنامه یا فایل ها استفاده می شود
موجود در توزیع به عنوان مثال، Oldconfig.U از تستی مانند:

@if {test -d ../hints}

و مجموعه فقط در صورت وجود یک کد وابسته به اشاره خواهد بود نکات دایرکتوری در
دایرکتوری سطح بالای بسته توجه داشته باشید که تست ها از داخل " اجرا می شوند.MT' فهرست راهنما،
از این رو "../" مورد نیاز در آزمون.

از پیش پردازنده همچنین می توان برای جلوگیری از قرار دادن کد بی فایده در زمانی که نماد وجود ندارد استفاده کرد
تعریف شده است. واحدهایی که بیش از یک نماد را تعریف می کنند می توانند به این ترتیب محافظت شوند (از آنجایی که واحد است
با جمع‌آوری کد وابسته به نماد در یک جفت @if/@end بارگذاری می‌شود. برای
نمونه، مثال:

@if I_TIME || I_SYS_TIME || I_SYS_TIME_KERNEL
need_time_h='true'
@else
need_time_h='false'
@پایان

آزمایش خواهد کرد که آیا کد منبع از یکی از سه نماد کنترل کننده استفاده می کند یا خیر
la ساعت. ساعت or sys/time.h دربرگیرنده و بر این اساس نماد پوسته را تعریف کنید. که می دهد
مجموعه بازخورد در مورد آنچه که منابع نیاز دارند و جلوگیری از اشکال رفع آن
واحدهای منجمد

از طریق خطوط '?W:'، می توانید ترکیب های جالبی دریافت کنید. به عنوان مثال، i_time.U واحد
باید بداند که آیا منابع C از آن استفاده می کنند یا خیر ساختار منطقه زمانی نوع از این رو،
خط:

?W::منطقه زمانی

برای اثر جانبی آن در تعریف نماد استفاده می شود منطقه زمانی برای پیش پردازنده در
سپس کد واحد می تواند بگوید:

@if منطقه زمانی
برای s_timezone در '-DS_TIMEZONE' ''; انجام دادن
@else
s_timezone=''
@پایان

... کد با استفاده از s_timezone ...

@if منطقه زمانی
انجام شده
@پایان

و یک حلقه اضافی داشته باشید که دو مقدار متوالی را امتحان می کند s_time zone متغیر اما فقط
در صورت نیاز.

منسوخ شده نمادها
نمادهای منسوخ برای سهولت انتقال به قدیمی تر حفظ می شوند متاکونفیگ واحدها مگر اینکه
la -o سوئیچ به منتقل می شود متاکونفیگ نادیده گرفته خواهند شد. با این حال، یک منسوخ شده پرونده خواهد شد
ایجاد می شود و به شما می گوید کدام فایل ها از آن نمادهای منسوخ استفاده می کنند و چه چیزی
نمادهای جدیدی هستند که مورد استفاده قرار می گیرند.

طول عمر نمادهای منسوخ یک ویرایش کامل است، یعنی زمانی که نمادهای منسوخ شده حذف خواهند شد
ویرایش پایه بعدی صادر می شود (البته ارتقاء پچ حساب نمی شود). بنابراین، آن است
عاقلانه است که منابع خود را ترجمه کنید و در اسرع وقت از نمادهای جدید استفاده کنید.

مجموعه نکات
ممکن است اتفاق بیفتد که منطق پیکربندی داخلی انتخاب های اشتباهی انجام دهد. برای
به عنوان مثال، در برخی از پلت فرم، vfork() تماس سیستم وجود دارد اما خراب است، بنابراین باید
استفاده نشود. نمی توان آن دانش را در خود واحدها گنجاند، زیرا
ممکن است یک مشکل موقتی باشد که فروشنده در نهایت آن را برطرف خواهد کرد، یا چیزی که
با یک ارتقاء سیستم عامل جدید معرفی شد.

به هر حال، برای همه آن مشکلات کوچک که بیش از حد خاص سیستم هستند، متاکونفیگ
پشتیبانی از فایل های اشاره را فراهم می کند. برای استفاده از آن، باید a ایجاد کنید نکات دایرکتوری در
دایرکتوری سطح بالای بسته، و هنگام اجرا آن را داشته باشید متاکونفیگ. که بارگذاری خواهد شد
بخش مربوط به اشاره از Oldconfig.U.

از آن به بعد، می توانید برخی از متغیرهای پوسته را از قبل تنظیم کنید مجموعه در یک سیستم عامل خاص استفاده می کند
فایل .sh. کد در آن وجود دارد Oldconfig.U که سعی می کند حدس بزند که کدام فایل های اشاره مورد نیاز است
محاسبه یک نام استاندارد بر اساس نام سیستم عامل سیستم، نام هسته، انتشار
شماره و غیره... از آنجایی که این اطلاعات احتمالاً به سرعت تغییر می کند، من آن را مستند نمی کنم
اینجا. شما باید کد را مهندسی معکوس کنید Oldconfig.U.

هنگامی که برای اولین بار بسته خود را منتشر می کنید، فهرست فایل hints شما باید خالی باشد. اگر
کاربران بسته شما شکایت دارند که با آن مشکل دارند مجموعه پیش فرض روی a
سیستم خاص، شما باید ببینید که آیا این یک مشکل خاص پلت فرم است یا یک
یک عمومی در مورد اول، زمان معرفی یک فایل راهنمایی جدید فرا رسیده است، در حالی که در
در مرحله دوم، واحد مربوطه باید تجدید نظر شود.

به عنوان مثال، سیستم‌های SGI خراب هستند vfork() تماس سیستم، از این زمان
نوشتن و نام فایل اشاره مربوطه است sgi.sh. بنابراین تنها کاری که باید انجام دهید این است که ایجاد کنید
a نکات/sgi.sh فایلی که در آن می نویسید:

d_vfork="$define"

که همیشه نقشه برداری خواهد شد vfork on چنگال (نگاه کنید به d_vfork.U). هنگام اجرا بر روی سیستم های SGI برای
بار اول، مجموعه تشخیص خواهد داد که وجود دارد نکات/sgi.sh فایل، و ما در آن هستیم
یک ماشین IRIX (نام هسته اغلب /irix است)، بنابراین پیشنهاد می کند sgi به عنوان یک
اشاره ممکن اگر کاربر آن را بپذیرد، و از آنجایی که $d_vfork مقدار از طریق تغییر داده می شود
$setvar تماس، الف اوه منتشر خواهد شد تا هشدار دهد که ما در شرف نادیده گرفتن مقدار هستیم
محاسبه شده توسط مجموعه.

توجه داشته باشید که لازم نیست ارائه دهید تمام نکات شناخته شده توسط Oldconfig.U. اگر یک فایل اشاره است
از دست رفته، به عنوان یک انتخاب احتمالی پیشنهاد نخواهد شد. تست های اکتشافی برای محاسبه اجرا شد
کاندیداهای اشاره احتمالی ضعیف هستند. اگر مقادیر جدید یا تست های متفاوتی دارید لطفا
آنها را برای من بفرست...

برجسته انتخاب
اگر یک را ایجاد کنید config.over فایل در دایرکتوری سطح بالا، مجموعه از شما خواهد پرسید که آیا شما
می خواهید آن را بارگیری کنید تا مقادیر پیش فرض را لغو کند. این قبل از ایجاد
config.sh فایل، بنابراین به شما فرصتی می دهد تا مقادیر ذخیره شده در آنجا را اصلاح کنید.

این با رویکرد نکات متمایز است زیرا یک فایل محلی است که کاربر هم هست
رایگان برای استفاده خود ایجاد کند. شما نباید خودتان چنین فایلی تهیه کنید، بلکه اجازه دهید
کاربر از این امکان مطلع است.

مجموعه گزینه
La مجموعه اسکریپت ممکن است با برخی از گزینه های مشخص شده در خط فرمان، به فراخوانی شود
کمی رفتار آن را تغییر دهید در اینجا گزینه های مجاز وجود دارد:

-d برای همه پاسخ ها از پیش فرض ها استفاده کنید.

-e بدون تردید از تولید گذشته ادامه دهید config.sh.

-f پرونده از فایل مشخص شده به عنوان پیکربندی پیش فرض استفاده کنید. در صورت عدم استفاده از این سوئیچ،
پیکربندی از آن گرفته شده است config.sh، در صورت وجود

-h پیام راهنما را چاپ کنید و خارج شوید.

-r در صورت امکان از ارزش نمادهای C مجدد استفاده کنید. با این کار از هزینه های پرهزینه صرف نظر می شود nm نماد
استخراج. در صورت استفاده برای اولین بار (بدون فایل پیکربندی قبلی)،
مجموعه سعی خواهد کرد یک برنامه کوچک را کامپایل و پیوند دهد تا از آن مطلع شود
وجود یک نماد یا عدم وجود آن.

-s حالت بی صدا. فقط رشته های چاپ شده روی توصیفگر فایل شماره 4 روی آن دیده می شود
صفحه نمایش (این پیام های مهم هستند). امکان خاموش کردن کامل وجود ندارد
هر خروجی، اما شما می توانید استفاده کنیدمجموعه -درز > / dev / null 2> و 1برای داشتن کامل
اجرا دسته ای بدون خروجی و بدون نیاز به تعامل کاربر.

-D نماد = ارزش
از پیش تعریف می کند نماد تعیین شده را تحمل کند ارزش. همچنین امکان استفاده از '-D
نمادکه از مقدار پیش فرض «define» استفاده می کند.

-E پس از تولید a در انتهای سؤالات پیکربندی توقف کنید
config.sh. این هیچ کار نمی کندساخت بستگی داردیا استخراج فایل های .SH.

-K کاربر آگاه وقتی از این گزینه استفاده می کنید، می دانید که چه کار می کنید و
بنابراین config.sh فایل همیشه به گونه ای مدیریت می شود که گویی در نظر گرفته شده است
استفاده مجدد، حتی اگر ممکن است در یک سیستم بیگانه تولید شده باشد. آن را نیز
از سقط جنین جلوگیری می کند مجموعه یک کامپایلر غیرقابل استفاده C یا یک مجموعه اشتباه را شناسایی می کند
از پرچم های C میانبرهای بیشتر ممکن است توسط این گزینه نیز فعال شوند
آینده. این گزینه در مستند شده است مجموعه پیام استفاده، برای یادآوری
در مورد وجود آن، اما انتظار می رود توضیحات ارائه شده به اندازه کافی مرموز باشد.
:-)

-O اجازه دادن به مقادیر مشخص شده از طریق a -D or -U برای لغو تنظیمات از هر بارگذاری شده
فایل پیکربندی. این رفتار پیش‌فرض نیست، زیرا این رفتار پیش‌فرض است
به متغیرهای مشتق شده از متغیرهایی که در حال حاضر تغییر می دهید منتشر نشود.
طبیعتاً بدون -O، تنظیم فقط زمانی انجام می شود که هیچ فایل پیکربندی وجود نداشته باشد
بارگذاری شده است که ایمن است زیرا متغیرهای مشتق هنوز محاسبه نشده اند ...

-S جایگزینی متغیر را روی همه فایل های .SH انجام دهید. می توانید آن را با
-f برای انتشار هر پیکربندی که دوست دارید تغییر دهید.

-U نماد=
مجموعه های پیش تنظیم نماد برای تحمل یک مقدار خالی همچنین امکان استفاده از '-U نماد'
که تنظیم خواهد شد نماد به 'undef'.

-V شماره نسخه را چاپ کنید متاکونفیگ که این را ایجاد کرد مجموعه خط
و خارج شوید.

محل دویدن و پیاده روی محیط
با شروع، مجموعه محلی ایجاد می کند UU دایرکتوری و از آنجا اجرا می شود. دایرکتوری
با پایان یافتن پیکربندی حذف می شود، اما این بدان معناست که باید اسکریپت را از جایی اجرا کنید
شما می توانید بنویسید، یعنی نه از یک فایل سیستم فقط خواندنی.

شما می توانید اجرا کنید مجموعه هر چند از راه دور، مانند:

../package/Configure

برای پیکربندی منابعی که به صورت محلی وجود ندارند. تمامی فایل های تولید شده در آن قرار خواهند گرفت
دایرکتوری که در آن اسکریپت را اجرا می کنید. این جادو به لطف src.U انجام می شود
واحدی که در حال تنظیم است $src و $rsrc متغیرهایی برای اشاره به منابع بسته. که
بسته به اینکه مسیر کامل یا نسبی است مجموعه از طریق یک یا کامل فراخوانی شد
مسیر نسبی

از درون UU زیر شاخه، می توانید استفاده کنید $rsrc برای دسترسی به فایل های منبع (واحد
ارجاع به فایل های منبع، نکات پیوند همیشه باید از این مکانیسم استفاده کنند و آن را فرض نکنند
فایل در دایرکتوری والد موجود است). همه Makefiles باید از متغیر $src استفاده کنند
به عنوان یک اشاره گر به منابع از بالای فهرست ساخت (جایی که مجموعه اجرا می شود)
مستقیم یا از طریق تنظیمات VPATH.

هنگام دویدن مجموعه از راه دور، فایل های .SH در دایرکتوری ساخت استخراج می شوند، نه
در درخت مبدا با این حال، به نوعی الف نیاز دارد ساخت پشتیبانی کنید تا بتوانید کامپایل کنید
چیزها در یک فهرست ساخت در حالی که منابع در جای دیگری قرار دارند.

با استفاده از جادویی تعاریف مجدد
با استفاده از -M سوئیچ، برخی از نگاشت مجدد جادویی ممکن است در یک confmagic.h
فایل. آن فایل باید بعد از آن اضافه شود پیکربندیالبته، اما پس از همه
سایر موارد مورد نیاز شامل فایل ها می باشد. برای مثال:

#include "config.h"
...
... دیگر اجزاء ...
...
#include "confmagic.h"

به طور معمول، confmagic.h برای نقشه برداری مجدد تلاش خواهد کرد bcopy() on memcpy() اگر نه bcopy() is
در دسترس محلی، یا تبدیل vfork به چنگال در صورت لزوم، از این رو آن را بی فایده می کند
در مورد HAS_VFORK سمبل.

این جادوی پیکربندی در فایل Glossary مستند شده است.

واحد قالب
مجموعه ای از قالب های واحد در آن وجود دارد متاکونفیگ دایرکتوری منبع، که در نظر گرفته شده است
توسط یک برنامه (هنوز نوشته نشده) برای تولید سریع واحدهای جدید برای انواع مختلف استفاده شود
موقعیت ها هیچ سندی برای این پروژه ناتمام وجود ندارد، اما فکر کردم به آن اشاره کنم
در صفحه راهنما در صورتی که بخواهید خودتان این کار را انجام دهید و سپس آن را مشارکت دهید...

AUTHORS


لری وال[ایمیل محافظت شده]> برای نسخه 2.0.
هارلان استن[ایمیل محافظت شده]> برای برنامه های افزودنی واحد مهم.
رافائل مانفردی[ایمیل محافظت شده]>.
بسیاری از همکاران دیگر برای متاکونفیگ واحدها برای دریافت لیست به فایل اعتباری مراجعه کنید.

با استفاده از خدمات onworks.net از metaconfig به صورت آنلاین استفاده کنید


سرورها و ایستگاه های کاری رایگان

دانلود برنامه های ویندوز و لینوکس

دستورات لینوکس

Ad