عربيالفرنسيةالإسبانية

Ad


OnWorks فافيكون

metaconfig - عبر الإنترنت في السحابة

قم بتشغيل metaconfig في موفر الاستضافة المجاني OnWorks عبر Ubuntu Online أو Fedora Online أو محاكي Windows عبر الإنترنت أو محاكي MAC OS عبر الإنترنت

هذا هو الأمر metaconfig الذي يمكن تشغيله في موفر الاستضافة المجاني OnWorks باستخدام إحدى محطات العمل المجانية المتعددة عبر الإنترنت مثل Ubuntu Online أو Fedora Online أو محاكي Windows عبر الإنترنت أو محاكي MAC OS عبر الإنترنت

برنامج:

اسم


metaconfig - منشئ البرنامج النصي لتكوينه

موجز


ميتاكونفيغ [-dhkmostvwGMV ] [-L دير ]

الوصف


ميتاكونفيغ هو برنامج يقوم بإنشاء البرامج النصية لتكوين. إذا كنت لا تعرف ما أ
تكوين البرنامج النصي هو، يرجى الانتقال إلى TUTORIAL قسم من هذه الصفحة اليدوية. إذا أردت
وصف كامل (رسمي) لطريقة الاستخدام ميتاكونفيغ ووحداته، يرجى الاطلاع على
REFERENCE قسم. وفيما يلي مقدمة سريعة ومرجع للمعرفة
المستخدمين.

ميتاكونفيغ تعمل من مجموعة من الوحدات والتي تحدد كل ما يعرفه Metaconfig
قابلية التنقل. كل وحدة قائمة بذاتها، ولا يلزم تسجيلها في أي مكان
بخلاف التضمين في دليل U العام أو دليل U الخاص بك. لو
يتم تثبيت حزمة dist (التي يعد metaconfig جزءًا منها) في LIB، ثم يتم تثبيت U
الدليل هو LIB/dist/mcon/U. على هذا الجهاز، دليل LIB هو /usr/share/dist. لك
دليل U الخاص، إذا كان لديك واحدًا، موجود في دليل المستوى الأعلى لحزمتك.
قبل أن تتمكن من الركض ميتاكونفيغ يجب عليك القيام بعدة أشياء:

· قم بإنشاء ملف .package في دليل المستوى الأعلى للحزمة عن طريق التشغيل باكينيت.
سيسألك هذا البرنامج عن الحزمة الخاصة بك ويتذكر ما تخبره به
جميع برامج التوزيع يمكن أن تكون ذكية.

· راجع المسرد (في LIB/dist/mcon) واكتب نصوص shell وبرامج C الخاصة بك
من حيث الرموز التي يعرف Metaconfig كيفية تعريفها. لا تحتاج أن تقول
metaconfig هي الرموز التي استخدمتها، حيث أن metaconfig سوف تكتشف ذلك نيابةً عنك.

· توليد أي .SH البرامج النصية اللازمة لكتابة Makefiles أو البرامج النصية التي ستعتمد
على القيم المحددة بواسطة التكوين. هناك برنامج اسمه جعل هذا سوف يساعدك
تحويل برنامج نصي عادي إلى قالب script.SH؛ ستظل هناك حاجة لبعض التحرير
يتم إجراؤها على ملف .SH الناتج لتحريك جزء التكوين المتغير في ملف
الجزء العلوي من البرنامج النصي (راجع التعليقات المضمنة التي تم إنشاؤها بواسطة جعل داخل .SH الخاص بك
الملف).

· قم بإنشاء ملف MANIFEST.new في دليل المستوى الأعلى الذي يسرد كافة الملفات الموجودة فيه
مجموعتك. سيظل هذا الملف خاصًا ولن يكون جزءًا من الملف النهائي
توزيع. (للتيسير، سيتم استخدام ملف MANIFEST بواسطة ميتاكونفيغ if
لا يوجد ملف MANIFEST.new حتى الآن.) يجب أن يكون اسم الملف هو الحقل الأول في كل ملف
خط. بعد مرور بعض المسافة البيضاء، يمكنك إضافة تعليق قصير يصف ملفك. فقط
يجب أن يتم إدراج الملفات المصدر هناك. الملف الخاص patchlevel.h (الذي
تتم معالجتها وصيانتها بواسطة أدوات التصحيح - راجع بات(١) ينبغي أن يكون جزءا من
MANIFEST.new، ولكن قد يتم تجاهله بصمت بواسطة بعض الأدوات. شئ متعارف عليه،
يجب أن يتم إدراج الملفات التي يحتفظ بها RCS فقط هناك patchlevel.h يجري الملف
استثناء واحد مهم.

· اختياريًا، قد ترغب في إنشاء ملف MANIFEST، والذي سيكون بمثابة نسخة مُصدَّرة
من MANIFEST.new الخاص بك. يجب أن يكون هذا الملف جزءًا من الإصدار، أي أن يكون مدرجًا في كليهما
MANIFEST.new الخاص بك والبيان نفسه. واحد من ميتاكونفيغ الوحدات تعرف عن هذا
الملف وسيجبر التكوين على إجراء فحص الإصدار، والتأكد من جميع الملفات
المذكورة هناك جزء من التوزيع. يجب أن تكون ملفات MANIFEST و MANIFEST.new
تكون متميزة، وليس الروابط.

· انسخ أي ملفات .U تريد تعديلها إلى دليل U الخاص بك. أي ملفات .U
سيتم استخدام دليل U الخاص بك بدلاً من الدليل الموجود في دليل U العام
الدليل. على سبيل المثال، إحدى الطرق لفرض تضمين أي وحدة هي نسخ ملف End.U
الملف إلى دليل .U الخاص بك وأضف اسم الوحدة التي تريد الاعتماد عليها
نهاية السطر؟ MAKE:. لا يمكن إجبار وحدات معينة إلا بهذه الطريقة، وهي
تلك الموجودة في النموذج Warn_*.U وChk_*.U. يمكنك أيضًا تخصيص بعض الإعدادات الافتراضية
قم بتكوين المتغيرات عن طريق نسخ Myinit.U إلى دليل U الخاص بالحزمة الخاصة بك و
تحديد المتغيرات في تلك الوحدة.

أنت الآن جاهز للتشغيل ميتاكونفيغ. سيؤدي ذلك إلى إنشاء ملف ضبط ملف، واختياريا أ
config_h.SH ملف (إذا كانت مصادرك تستخدم رموز C). سوف الملفات التي تم إنشاؤها
تتم إضافتها تلقائيًا إلى MANIFEST.new إذا لزم الأمر. لا تنسى تحديث الخاص بك
ملف البيان بالرغم من ذلك.

لإنشاء وحدات جديدة، قم بما يلي:

· نسخ وحدة مماثلة إلى ملف .U جديد. الاسم الذي تختاره يجب أن يكون اسم أ
المتغير الذي تم إنشاؤه بواسطة الوحدة، على الرغم من أن هذا يعد فقط من أجل الراحة بالنسبة لك، وليس
متطلبات. يجب أن يكون 12 حرفًا أو أقل لمنع تقطيع اسم الملف.
في الواقع، من المحتمل أن يكون 10 أو أقل حتى يتمكن أولئك الذين يرغبون في استخدام RCS من الحصول عليه
a .U,v في النهاية بدون تقطيع. يستخدم Metaconfig حالة الحرف الأول لـ
تحديد ما إذا كان يتم إنتاج أي متغير بالفعل بواسطة هذه الوحدة، لذلك لا تستخدم الأحرف الكبيرة
اسم الوحدة إذا كان من المفترض أن ينتج متغير Shell.

· قم بتحرير ملف .U الجديد لتفعل ما تريد. الأول؟ MAKE: يشير السطر إلى
التبعيات. قبل نقطتي القائمة النهائية كافة المتغيرات التي تحددها هذه الوحدة، و
بعد النقطتين الأخيرتين جميع المتغيرات (أو الوحدات الأخرى) التي تعتمد عليها هذه الوحدة.
ومن المهم جدًا أن تكون هذه القوائم دقيقة. إذا كانت التبعية اختيارية و
إذا أمكن استخدام القيمة الافتراضية، فيجب عليك بادئة التبعية بعلامة "+". ال
لن يتم تحميل الوحدة المقابلة لحساب الرمز، ما لم يكن ذلك مطلوبًا حقًا
بواسطة وحدة أخرى.

· إلى أقصى حد ممكن، حدد وحدتك بناءً على متغير الصدفة المحدد في
؟التهيئة: خطوط. سيؤدي هذا إلى نقل تعريفات المتغيرات إلى وحدة Init.U، حيث
يمكن تجاوزها بواسطة التعريفات الموجودة في Myinit.U، والتي يتم تضمينها بعد Init.U.

· إضافة تعريف لأي من رموز C المطلوبة مثل خطوط H:. سطر يبدأ بـ
?H:?%<: في ملف .U ستتم إضافته إلى ملف config.h النهائي إذا وفقط إذا
يقرر metaconfig أن هناك حاجة إلى هذه الوحدة. %< يرمز إلى اسم الوحدة،
والذي يصادف أنه اسم الملف أيضًا (بدون .U) إذا اتبعت ملف
مؤتمر. ضع دائمًا تعليقًا على كل سطر ?H: في حالة وجود أحد المتغير
البدائل في وقت سابق على السطر تبدأ التعليق دون إنهائه. أي قذيفة
المتغير الذي يبدأ بـ d_ قد يفعل ذلك، لذا احذر. إذا قمت بحذف ?%<:، إذن
سيحاول metaconfig استشعار الرمز الذي يلزم تعريفه قبل أي شيء
إدراجها في config.h.

· أضف تعريفات في المسرد مثل ?S: سطور لمتغيرات الصدفة و ?C: سطور لـ C
متغيرات المعالجات المسبقة انظر الوحدة الحالية للحصول على أمثلة. من المهم جدًا أن
ابدأ كل إدخال باسم رمز مضبوط على اليسار، ثم قم بإنهاء كل إدخال بـ ?C:. أو
؟س:. خط. الخوارزمية التي تترجم إدخالات رمز المعالج المسبق لـ C لـ
يعتمد مسرد التعليقات الخاصة بـ config.h على هذا.

· تأكد من ترتيب كل ما تبذلونه من ? الخطوط صحيحة. الترتيب الصحيح هو:

?RCS: و ?X: مجرد تعليقات في الأساس
?صنع: تبعيات metaconfig
?Y: توجيه تخطيط الوحدة
?S: تعريفات غلاف المسرد
?C: تعريفات مسرد C
?H: تعريفات config.h
?M: تعريفات confmagic.h
?W: الرموز المطلوبة
?V : رموز مرئية
?F: الملفات التي تم إنشاؤها بواسطة هذه الوحدة
?T: رموز الصدفة المؤقتة المستخدمة
؟D: القيمة الافتراضية للتبعيات الاختيارية
?O: يستخدم لتمييز الوحدات المتقادمة
?لينت: تلميحات ميتالينت
?INIT: تهيئة رموز الصدفة

فيما يلي مثال لإظهار ترتيب الخطوط والتنسيقات المختلفة المسموح بها:

?RCS: $RCS-Id$
?RCS: معلومات حقوق النشر
?RCS: $RCS-Log$
؟س:
?X: مثال مفتعل
؟س:
?MAKE:d_one اثنان: ثلاثة + أربعة خمسة
?اصنع: -اختر إضافة $@ %
؟ص:افتراضي
؟س:d_one:
?S: رمز الصدفة الأولى، يحدد بشكل مشروط ONE.
؟س:.
؟س:اثنان:
?S: رمز الصدفة الثانية، قيمة لـ TWO.
؟س:.
؟مخروط:
?C: رمز C الأول.
؟ج:.
ج: اثنان:
?C: رمز C الثاني.
؟ج:.
?H:#$d_one واحد /**/
?H:#define TWO "$two"
?H:#$d_one ONE_TWO "$two"
؟ح:.
؟م:قلب: HAS_FLIP
؟م:#ifndef HAS_FLIP
?M:#تعريف الوجه(x) بالتخبط(x)
؟م:#endif
؟م:.
?و:%<:one_two
؟V:p_one p_two:p_three
?F:ملف ./ftest !tmp
؟T:tmp فار
?D:two='undef'
?لينت: تغيير الثلاثة
?INIT:two_init='2'
: يتبع كود القشرة الذي ينفذ الوحدة
p_one='واحد'
p_two='اثنين'
ص_ثلاثة = ""

اسمحوا لي أن أذكر ذلك مرة أخرى: تعريف الوحدة أعلاه هو أ زائف واحد لإظهار فقط
إمكانيات مختلفة. مثل هذه الوحدة لن تخدم سوى القليل من الأغراض على أي حال... وبعضها أكثر
لم يتم وصف الميزات المتقدمة هنا. يرجى الرجوع إلى REFERENCE قسم للمزيد
معلومات كاملة.

· ضع الوحدة في دليل U العام أو الخاص حسب الاقتضاء.

· إعادة التشغيل ميتاكونفيغ.

· أرسل وحدتك إلى [البريد الإلكتروني محمي] (رافائيل مانفريدي) لإدراجه في النسخة الرئيسية،
إذا كنت تعتقد أنها ذات فائدة عامة.

لإضافة برنامج جديد ليتم تحديد موقعه:

· تحرير Loc.U وإضافة اسم البرنامج إلى السطر ?MAKE: (بين
نقطتان) وإما إلى القائمة المحلية أو قائمة المحاولة (اعتمادًا على ما إذا كان البرنامج
إلزامية أم لا).

· إعادة تشغيل ملف التعريف.

· أرسل لي وحدتك لإدراجها في النسخة الرئيسية، إذا كنت تعتقد أنها عامة
الفائدة.

ملاحظات لكتابة ملفات .U:

* استخدم دائمًا "rm -f" لأن هناك أنظمة يكون فيها rm تفاعليًا افتراضيًا.

* لا تستخدم "set -- ..." لأن "--" لا يعمل مع كل الصدفة. استخدم "مجموعة x ...؛
يحول".

* لا تستخدم "unset ENV" نظرًا لأن unset ليس محمولاً بالكامل. قل "ENV=''" بدلاً من ذلك.

* استخدم الصدى دائمًا "" (مع مسافة) بسبب أنظمة Eunice.

* فقط استخدم تجربه بالعربي باستخدام -r أو -w أو -f أو -d نظرًا لأن هذه هي المفاتيح المحمولة الوحيدة. في
على وجه الخصوص، تجنب "اختبار -x".

* استخدم فقط البرامج المرفقة مع الإصدار 7، حتى تعرف أن كل شخص لديه هذه البرامج.

* استخدم $contains عندما تريد grep بشكل مشروط، نظرًا لعدم قيام جميع greps بإرجاع ملف
وضع معقول. تأكد من إعادة توجيه الإخراج إلى /dev/null، باستخدام '>/dev/null
2>&1'.

* استخدم "if test" بدلاً من "if [...]" نظرًا لأنه ليس كل شخص يعرف البنية الأخيرة.

* استخدم البرنامج النصي myread للمدخلات حتى يتمكنوا من الهروب من الصدفة والإعداد الافتراضي
تقييم. الشكل العام هو

حالة "$grimble" في
'') dflt=452;;
*) dflt="$grimble";;
ESAC
rp='كم عدد التذمر لديك؟'
. ./myread
تذمر = "$ans"

* استخدم البرنامج النصي getfile عند السؤال عن اسم مسار الملف ليكون اختياريًا
~ توسيع الاسم والتحقق من سلامة العقل. راجع وحدة Getfile.U للحصول على الوصف الكامل.

*ضع دائمًا أ

$startsh

في الجزء العلوي من كل برنامج نصي تم إنشاؤه سيتم تشغيله أو الحصول عليه من خلاله
ضبط.

* لا تفترض أبدًا وجود أنظمة UNIX الشائعة مثل حقيقة أن ملف الكائن ينتهي بـ .o و
الذي ينتهي به اسم المكتبة .a. استخدم ال $_o و $_a المتغيرات بدلا من ذلك (انظر
يونكس.U).

* عند إجراء اختبار التنفيذ والربط، اكتبه دائمًا على النحو التالي:

$cc $ccflags $ldflags حاول.c -o حاول $libs

لأن بعض الأنظمة تتطلب تحديد إشارات الارتباط قبل التجميع
الهدف (باستثناء مكتبات الارتباط اللاحقة).

* قم بإصدار رسائل مهمة في واصف الملف رقم 4، باستخدام '>&4' لإعادة توجيه الإخراج.
ستظهر هذه الرسائل فقط عند -s يتم إعطاء التبديل ل ضبط على
سطر الأوامر (الوضع الصامت).

* حاول دائمًا تحديد ما إذا كانت الميزة موجودة بالطريقة الأكثر تحديدًا أم لا، فلا تفعل ذلك
قل "if bsd" عندما يمكنك استخدام grep libc. هناك العديد من الأنظمة الهجينة هناك، و
يجب أن تقف كل ميزة أو تسقط من تلقاء نفسها.

* حاول دائمًا تحديد ما إذا كانت الميزة موجودة بالطريقة الأكثر عمومية أم لا
يمكن للحزم الأخرى استخدام وحدتك.

* عندما تكون في شك، قم بتعيين الإعداد الافتراضي واسأل. لا تفترض أي شيء.

* إذا كنت تعتقد أن المستخدم على خطأ، فاسمح لحقيقة أنه قد يكون على حق. ل
على سبيل المثال، يمكن أن يقوم بتشغيل Configure على نظام مختلف عن النظام الذي سيستخدمه
المنتج النهائي على.

يحتفظ Metaconfig بالأسماء التالية في الدليل الخاص بك، وإذا كنت تستخدم مثل هذا الاسم، فسيتم حفظه
قد تتعرض للضرب أو يكون لها تأثيرات أخرى غير متوقعة:

.MT/*
ضبط
مطلوب
مهمل
تكوين
config_h.SH
confmagic.h
ش/*
البيان.جديد

بالإضافة إلى ذلك، قد يؤدي التكوين إلى تحطيم هذه الأسماء في الدليل الذي يتم تشغيله فيه:

UU/*
التكوين.sh
التكوين.ح

OPTIONS


يتم التعرف على الخيارات التالية بواسطة ميتاكونفيغ:

-d قم بتشغيل وضع التصحيح. ليس مفيدًا حقًا إلا إذا كنت تقوم بتصحيح الأخطاء ميتاكونفيغ
نفسها.

-h اطبع رسالة المساعدة واخرج.

-k احتفظ بالدليل المؤقت، حتى تتمكن من فحص ملفات العمل التي يستخدمها
ميتاكونفيغ لبناء الخاص بك ضبط النصي. مفيد فقط عند تصحيح أخطاء
وحدة.

-m تفترض الكثير من الذاكرة ومساحة المبادلة. سيؤدي هذا إلى تسريع البحث عن الرمز في
الملفات المصدر لفترة طويلة من الوقت، على حساب الذاكرة
استهلاك...

-o خريطة الرموز القديمة على رموز جديدة. استخدم رمز التبديل هذا إذا كان لا يزال لديك بعضًا منه
الرموز القديمة في كود المصدر الخاص بك ولا تريد (أو لا تستطيع) إزالتها
لهم في الوقت الراهن. يتم تجاهل الرموز القديمة، على الرغم من ذلك
سوف أعطيك تحذيرا من ميتاكونفيغ.

-s قم بتشغيل الوضع الصامت.

-t تتبع الرموز كما تم العثور عليها.

-v قم بتشغيل الوضع المطول.

-w افترض أن الملف المطلوب محدث. سيؤدي هذا إلى تخطي الوقت والذاكرة
المرحلة المستهلكة لمسح كود المصدر، والبحث عن الرموز المعروفة. استخدمه
فقط عندما تعلم أن ملفك المصدر لم يتغير فيما يتعلق بملف
بركة ميتاكونفيغ الرموز المستخدمة.

-G قم بتوفير GNU أيضًا تكوين-مثل الواجهة الأمامية التي تم إنشاؤها ضبط
البرنامج النصي، ليتم تضمينه في التوزيع أيضا. هذه ليست سوى المجمع
حول ضبط البرنامج النصي بشكل طبيعي، ولكنه يتيح للأشخاص المطلعين على
أداة GNU لا تضيع عندما تواجه توزيعًا جديدًا.

-L دير تجاوز موقع المكتبة الافتراضي. عادة ما تكون مفيدة فقط للتكوين metaconfig
المشرفون لاستخدام الوحدات التي يتم تطويرها محليًا بدلاً من
المتاحة للجمهور. ال دير المحدد هو الذي يحتوي على الوحدات
U الدليل.

-M السماح بإنتاج أ confmagic.h ملف لإعادة رسم خريطة لبعض الآبار تلقائيًا
الرموز المعروفة لبعض البدائل الأخرى، مثل com.bcopy() يتم إعادة تعيينها
بشفافية ل ميمكبي () عندما لا تكون متاحة. تم تشغيل هذا الخيار
تلقائيا عندما أ confmagic.h الملف موجود في دليل المستوى الأعلى.
ما عليك سوى إزالة هذا الملف إذا كنت ترغب في تعطيل هذا الخيار بشكل دائم.

-V اطبع رقم النسخة واخرج.

TUTORIAL


هذا القسم (الطويل) هو مقدمة ل ميتاكونفيغ، والتي سوف نتعلم فيها كل
الأساسيات. إذا كنت تعرف بالفعل كيفية استخدامها ميتاكونفيغ، يمكنك الانتقال بأمان إلى التالي
والقسم الخاص به.

نبذة
عادةً عندما تريد الحصول على حزمة مصدر لتجميعها على نظام أساسي معين لديك
لتحرير ملف Makefile الرئيسي (بافتراض وجود واحد!) ، اختر مترجم C، وتأكد من ذلك
احصل على المكتبات المناسبة، ثم أطلق النار على جعل يأمر. إذا كانت الحزمة معقولة
مكتوب جيدًا، سيتم تجميعه (دون أن يكون التحذير خيارًا :-). في حد ذاته الأخير
الجملة هي أداء حقيقي، نظرًا لتنوع منصات UNIX المتاحة اليوم
وتنوع النكهات يعني أن مؤلف الحزمة قد تعمق
صعوبة في معرفة الخيارات الصحيحة في ظل بعض التجارب القياسية والتخمين والعبث
حولها يتضمن النظام وأنواعه.

ومع ذلك، على الرغم من كل موهبته، لا يمكن للمؤلف أن يعرف أن هناك نظامًا ما لديه
استدعاء نظام معطل، أو أن بعض بنية النظام تفتقر إلى حقل قياسي واحد، أو
ببساطة ما إذا كان ملف التضمين موجودًا أم لا. وأنا لا أعتبر ضمنا
الافتراضات، مثل النوع الذي تم إرجاعه بواسطة مالوك () وظيفة أو وجود
إعادة تسمية () استدعاء النظام على سبيل المثال لا الحصر. ولكن تلك المعرفة ضرورية لتحقيق حقيقي
قابلية التنقل.

الآن دعونا لا نسيء إلى أنفسنا. يتطلب استخدام هذه المعلومات مهارات أكبر، ومع ذلك فهو ممكن
يؤدي إلى المزيد من البرامج المحمولة حيث يتم كتابتها بعد ذلك بطريقة مستقلة عن النظام
ويعتمد فقط على حقيقة أن بعض الافتراضات صحيحة أو خاطئة على نظام معين،
كل افتراض لا علاقة له ببعضه البعض. أي أننا لا نقول: نحن على طريق
نظام BSD أو نحن على نظام USG. هذا غامض للغاية على أي حال في الوقت الحاضر. لا، نريد أن
قل للكود المصدري: هذا النظام لا يحتوي على إعادة تسمية () استدعاء النظام و مالوك ()
إرجاع (فارغ *) .

Metaconfig هي أداة ستتيح لك القيام بذلك، مع ميزة إضافية تتمثل في عدم القيام بذلك
الاضطرار إلى تعديل ملف Makefile يدويًا إذا سارت الأمور على ما يرام. عن طريق الركض ميتاكونفيغ، تقوم بإنشاء
البرنامج النصي شل اسمه ضبط. لقد تم تكريس الكثير من الجهود لتكوين البرنامج النصي
الداخلية للتأكد من أنه سيتم تشغيله على 99٪ من الأصداف الموجودة المتوفرة حتى الآن
كتابة. سوف يقوم التكوين بالتحقق من النظام المستهدف، وطرح الأسئلة عند الشك
اجمع كل الإجابات في ملف Shell واحد، والذي يمكن استخدامه بدوره
يتم إنشاء ملفات Makefiles وC التي تم تكوينها تلقائيًا.

لا يوجد سوى مجموعة محدودة (ولكنها كبيرة جدًا) من الرموز المتاحة لنصوص Shell الخاصة بك
وبرامج سي. وكلها موثقة في ملف المسرد. كل ما عليك فعله هو التعلم
عنها والبدء في استخدامها لمعالجة مشكلات قابلية النقل والتكوين. ثم،
عن طريق الركض ميتاكونفيغ، سيتم إنشاء برنامج نصي مناسب لحزمتك.

تم إنشاء البرنامج النصي للتكوين من عدة وحدات (أكثر من 300 وحدة)، كل وحدة
مسؤول عن تحديد عدد صغير من رموز الصدفة و/أو C. يتم تجميع الوحدات
معًا في المرحلة النهائية، مع احترام الرسم البياني للتبعية (قد تحتاج وحدة واحدة إلى النتيجة
من عدة وحدات أخرى يتم وضعها مسبقًا في البرنامج النصي).

رموز
الرموز هي أهم شيء في ميتاكونفيغ عالم. هم الأصغر
الكيان المعترف به، عادة ما يكون كلمة، ويمكن منحه قيمة في نهاية التكوين
تنفيذ. على سبيل المثال، رمز المعالج المسبق C HAS_RENAME هو ميتاكونفيغ رمز ذلك
يتم ضمان تعريفه إذا، وفقط إذا إعادة تسمية () استدعاء النظام موجود. على نفس المنوال،
ال $رانليب سيتم تعيين متغير الصدفة إما على ':' أو 'ranlib' اعتمادًا على ما إذا كان ملف
استدعاء رانليب هناك حاجة إلى برنامج لطلب ملف المكتبة. كيف يعمل هذا ليس كذلك
المهم الآن، المهم هو أن نفهم أن هذه الرموز تُعطى حياة
(أي قيمة) عليها ضبط تنفيذ.

يعد استخدام الرموز أمرًا بسيطًا نسبيًا. في ملف مصدر C، يمكنك ببساطة استخدام الرمز
القيمة، كتوجيه ما قبل المعالج (على سبيل المثال: #ifdef HAS_RENAME) أو إذا كان الرمز
value عبارة عن سلسلة، مباشرةً كما تستخدم الماكرو في لغة C. وفي ملف shell أو ملف
Makefile، يمكنك الرجوع إلى رمز الصدفة مباشرةً.

في الواقع، أنا أكذب، لأن هذا ليس سحريًا تمامًا مثل الفقرة السابقة
يمكن أن يبدو. في ملف C، تحتاج إلى تضمين ملف Configure-produced التكوين.ح ملف و
يجب عليك تغليف برنامج Shell النصي أو Makefile في ملف .SH ويمكنك الرجوع إلى Shell
الرمز فقط في جزء استبدال المتغير من ملف .SH هذا. المزيد عن هذا لاحقا.

مصدر ملفات
قد تظهر الرموز فقط في مجموعة محدودة من الملفات المصدر، لأن ميتاكونفيغ سوف فقط
قم بمسحها ضوئيًا عند البحث عن الرموز المعروفة، في محاولة لمعرفة الوحدات التي ستحتاجها.
يمكنك استخدام رموز C في ملفات مصدر C، أي الملفات ذات الامتداد .c, .h, .y or .l التمديد و
يتم البحث عن رموز Shell فقط في ملفات .SH.

من أجل الحصول على قيمة الرمز، يحتاج ملف C إلى تضمين الخاص التكوين.ح
الملف الذي تم إنتاجه بواسطة ضبط عندما تكون رموز C موجودة. ويتم تشغيل ملفات .SH
من خلال قذيفة، وإنتاج ملف جديد. ومع ذلك، في القسم العلوي من ملف .SH، يوجد ملف .SH
تختص التكوين.sh ملف (يتم إنتاجه أيضًا عن طريق تشغيل ضبط) مصدر ومتغير
تنطبق البدائل. في الحقيقة، التكوين.ح يتم إنتاجه عن طريق تشغيل ميتاكونفيغ-أنتجت
config_h.SH الملف، مرة أخرى باستخدام استبدال المتغير. لذلك نحن في طريقنا للنظر في ذلك أ
أقرب قليلاً لأن هذا هو قلب الكل ترتيب مخطط...

متغير الاستبدال
هناك بناء قذيفة يسمى هنا وثيقة والتي تمكن الأمر من أخذ مدخلات
المحدد داخل البرنامج النصي نفسه. يتم تفسير هذا الإدخال بواسطة Shell على أنه مزدوج
سلسلة مقتبسة أو سلسلة مقتبسة واحدة اعتمادًا على شكل المستند هنا
تخصيص.

لتحديد مستند هنا، يتم استخدام الرمز المميز '<<'، متبوعًا بمعرف واحد. من
بعد ذلك، تشكل سطور البرنامج النصي المتبقية مدخلات الأمر، حتى هنا
تم العثور على المستند على سطر بمفرده. استبدال Shell (بما في ذلك متغير Shell
البدائل) ما لم يكن المعرف محاطًا بعلامات اقتباس مفردة. على سبيل المثال:

فار='الأول'
القطران = "الثانية"
صدى "--> أول مستند هنا:"
القط <
فار='$فار'
القطران='$القطران'
بعثة مراقبة الانتخابات
صدى "--> الوثيقة الثانية هنا:"
القط <<'EOM'
صدى $فار
صدى القطران $
بعثة مراقبة الانتخابات
صدى "--> النهاية."

سوف تنتج، عند تشغيلها من خلال قذيفة:

--> أولا هنا الوثيقة:
فار='الأول'
القطران = "الثانية"
--> الوثيقة الثانية هنا:
صدى $فار
صدى القطران $
--> النهاية.

يتم تفسير محتوى المستند الأول هنا بينما يتم إخراج المستند الثاني كما هو.
كلاهما مفيد في البرنامج النصي .SH، كما سنرى.

باستخدام مخطوطات
عادةً ما يتم إنتاج البرنامج النصي .SH عن طريق تشغيل ملف .SH MakeSH البرنامج النصي الآخر ملف موجود،
تحويل ملف الى ملف.SH. لنأخذ مثالا واحدا. هنا نص صغير
(دعنا نسميها intsize) الذي يطبع رسالة واحدة بحجم مادبا نوع البيانات في C
ولسوء الحظ، فإن لها قيمة مضمنة فيها، وبالتالي:

#!/ بن / ش
الحجم الداخلي='4'
صدى "على هذا الجهاز، نوع int هو $intsize بايت"

هيا نركض جعل عليه بكتابة "جعل intsize'. نحصل على واحد intsize.SH ملف ذلك
يشبه هذا:

حالة $CONFIG في
'')
إذا كان الاختبار -f config.sh؛ ثم TOP=.;
اختبار إليف -f ../config.sh; ثم أعلى=..;
اختبار elif -f ../../config.sh; ثم أعلى=../ ..;
اختبار elif -f ../../../config.sh; ثم أعلى=../../ ..;
اختبار elif -f ../../../../config.sh; ثم أعلى=../../../ ..;
آخر
صدى "لا يمكن العثور على config.sh."; خروج 1
fi
. $TOP/config.sh
;;
ESAC
: هذا يفرض على ملفات SH إنشاء هدف في نفس الدليل مثل ملف SH.
: هذا حتى يعرف make تعتمد دائمًا مكان العثور على مشتقات SH.
حالة "$ 0" في
*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
ESAC
صدى "استخراج intsize (مع بدائل متغيرة)"
: سيحتوي هذا القسم من الملف على بدائل متغيرة.
: انقل أي شيء يحتاج إلى تكوين الغواصات من !NO!SUBS! قسم إلى !GROK!هذا!.
: قم بحماية أي علامات الدولار والعلامات الخلفية التي لا تريد تفسيرها
: عن طريق وضع شرطة مائلة عكسية في المقدمة. يمكنك حذف هذه التعليقات.
$spitshell >intsize<
$startsh
!GROK!هذا!

: في الدولارات التالية والعلامات الخلفية لا تحتاج إلى شرطة مائلة عكسية إضافية.
$spitshell >>intsize <<'!لا!الغواصات!'
الحجم الداخلي='4'
صدى "على هذا الجهاز، نوع int هو $intsize بايت"
!لا!الغواصات!
شمود 755 حجم كبير
$ يونيس فيكس intsize

الجزء الأول من هذا البرنامج النصي (في حقيبة بيان) يحاول تحديد موقع التكوين.sh
الملف، من أجل مصدره. ال التكوين $ المتغير يكون خطأ افتراضيًا، ويكون صحيحًا عندما
التكوين.sh تم الحصول عليه بالفعل (وهذا هو الحال إذا تم تنفيذ هذا الملف من
في غضون ضبط نفسها، ولكن دعونا لا نخلط بين هذه القضية هنا).

بمجرد التكوين.sh كان الملف عبارة عن مصادر، وجميع رموز الصدفة محددة بواسطة ضبط .
تعيين. نحن نعلم أن الوصول إلى بيان الحالة الثاني، يستخدم لتغيير الدليل الحالي يجب أن يكون أ
يمكن استخدام المسار للوصول إلى هذا البرنامج (على سبيل المثال إذا قلنا "sh ../scripts/intsize.SH'، نحن
سيتم تشغيله أولاً "cd ../نصوص' قبل المتابعة). إذا كنت لا تفهم هذا، لا تفعل
قلق حيال شيء.

هنا تأتي الأشياء المثيرة للاهتمام. يستخدم هذا البرنامج النصي $سبيتشل متغير، وليس كذلك
شيء نعرفه عنه...حتى الآن. إذا نظرت إلى ملف المسرد، سترى ذلك
هذا متغير يعرفه ميتاكونفيغ. إذا جعلت هذا الملف جزءًا من توزيعتك
(من خلال تضمينه في ملف MANIFEST.new، سنعود إلى ذلك لاحقًا) وقم بالتشغيل
ميتاكونفيغ، ثم ضبط سيحدد البرنامج النصي قيمة مناسبة لهذا المتغير
وسيتم وضعها في التكوين.sh. الشيء نفسه ينطبق على $startsh والغامض $eunicefix at
النهاية. على نظام معقول، الجزء ذو الصلة من التكوين.sh سيبدو مثل هذا:

فظ = 'قطة'
البداية='#!/ بن / ش'
يونيسفيكس =':'

آه! نحن نصل إلى هناك. الآن يبدو مألوفا. نحن نواجه واحدة قط الأمر الذي
يأتي الإدخال من مستند محرف هنا متغيرًا ويتم إعادة توجيه مخرجاته إليه
intsize. ستكون القيمة هي $startsh، أي '#!/ بن / ش'. بخير حتى الآن.

ثم نصل إلى توسيع الوثيقة الثانية هنا، للحصول على ما تبقى من النص. هذا
الوقت، رمز الوثيقة هنا محاط بعلامات اقتباس مفردة بحيث تكون المحتويات
ملحق حرفيا ب intsize ملف. لذلك، عن طريق تشغيل "sh intsize.SH"، نحصل على
الإخراج التالي:

استخراج intsize (مع بدائل متغيرة)

وبالنظر إلى الملف intsize الذي تم إنتاجه، نرى:

#!/ بن / ش
الحجم الداخلي='4'
صدى "على هذا الجهاز، نوع int هو $intsize بايت"

وهو بالضبط ما كان لدينا في البداية. حتى الآن، لا يوجد إجراء عملي..
ولكن، كم هو رائع! لقد حدث ذلك (محض صدفة، ثق بي!) ميتاكونفيغ يعرف
حول $intsize رمز القشرة. عن طريق نقل تهيئة intsize إلى المتغير-
منطقة محرفة من البرنامج النصي .SH وتهيئته باستخدام ملف ضبط-القيمة المحسوبة،
وإزالة التعليقات عديمة الفائدة الآن التي أضافتها جعل، نحن نحصل:

حالة $CONFIG في
'')
إذا كان الاختبار -f config.sh؛ ثم TOP=.;
اختبار إليف -f ../config.sh; ثم أعلى=..;
اختبار elif -f ../../config.sh; ثم أعلى=../ ..;
اختبار elif -f ../../../config.sh; ثم أعلى=../../ ..;
اختبار elif -f ../../../../config.sh; ثم أعلى=../../../ ..;
آخر
صدى "لا يمكن العثور على config.sh."; خروج 1
fi
. $TOP/config.sh
;;
ESAC
حالة "$ 0" في
*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
ESAC
صدى "استخراج intsize (مع بدائل متغيرة)"
$spitshell >intsize<
$startsh
intsize='$intsize'
!GROK!هذا!

$spitshell >>intsize <<'!لا!الغواصات!'
صدى "على هذا الجهاز، نوع int هو $intsize بايت"
!لا!الغواصات!
شمود 755 حجم كبير
$ يونيس فيكس intsize

بالطبع، سيؤدي تشغيل هذا البرنامج النصي عبر الصدفة إلى إخراج نفس البرنامج النصي مرة أخرى. لكن اذا
نحن نجري ضبط على الجهاز حيث مادبا يتم تخزينها ككمية 64 بت، التكوين.sh سوف
طقم intsize إلى 8 و intsize سيحمل البرنامج النصي القيمة الصحيحة ويطبع:

على هذا الجهاز، نوع int هو 8 بايت

ايهم صحيح. تهانينا! لقد قمنا للتو بتكوين برنامج شل النصي !!

إنتاج التكوين.ح
يمكننا الآن أن نلقي نظرة على الطريق التكوين.ح يتم إنتاجه من config_h.SH. نحن نعرف ذلك
تشغيل ضبط تنتج التكوين.sh البرنامج النصي (كيف يتم ذلك بالضبط ليس بدقة
ذات صلة هنا، ولكن بالنسبة للفضوليين، فهو استبدال مستند آخر هنا
ضبط بحد ذاتها). ال config_h.SH نفسها بنيت من قبل ميتاكونفيغ في نفس الوقت
ضبط بشرط أن تستخدم رمز C واحدًا على الأقل ضمن مصادرك.

دعونا نلقي نظرة على بعض عشوائية config_h.SH ملف لمعرفة ما يحدث حقا:

حالة $CONFIG في
'')
إذا كان الاختبار -f config.sh؛ ثم TOP=.;
اختبار إليف -f ../config.sh; ثم أعلى=..;
اختبار elif -f ../../config.sh; ثم أعلى=../ ..;
اختبار elif -f ../../../config.sh; ثم أعلى=../../ ..;
اختبار elif -f ../../../../config.sh; ثم أعلى=../../../ ..;
آخر
صدى "لا يمكن العثور على config.sh."; خروج 1
fi
. $TOP/config.sh
;;
ESAC
حالة "$ 0" في
*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
ESAC
صدى "استخراج config.h (مع بدائل متغيرة)"
سيد < 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_

/* نسخة:
* يتم تعيين هذا الرمز إلى memcpy إذا لم يكن روتين bcopy() كذلك
* متاح لنسخ السلاسل.
*/
/* HAS_BCOPY:
* يتم تعريف هذا الرمز إذا كان روتين bcopy() متاحًا له
* نسخ كتل من الذاكرة. يجب ألا تستخدم هذا الرمز تحت
* في الظروف العادية استخدم bcopy() مباشرة بدلاً من ذلك
* سيتم تعيينه إلى memcpy() إذا لم يكن bcopy متاحًا.
*/
#$d_bcopy HAS_BCOPY /**/
#ifndef HAS_BCOPY
#ifdef bcopy
#un-def bcopy
#endif
#define bcopy(s,d,l) memcpy((d),(s),(l)) /* تم تعيينه إلى memcpy */
#endif

/* HAS_DUP2:
* يشير هذا الرمز، إذا تم تعريفه، إلى أن روتين dup2 موجود
* متاح لتكرار واصفات الملفات.
*/
#$d_dup2 HAS_DUP2 /**/

/* أنا_STRING:
* هذا الرمز، إذا تم تعريفه، يشير إلى برنامج C أنه ينبغي عليه ذلك
* يشمل (أنظمة USG) بدلاً من (أنظمة بي إس دي).
*/
#$i_string I_STRING /**/

#endif
!GROK!هذا!

في الجزء العلوي من الملف، نتعرف على بنية .SH القياسية التي لدينا بالفعل
درس بالتفصيل. بعد ذلك يأتي استخراج الملف نفسه، عبر مستند هنا مع
بدائل متغيرة. ومع ذلك، هنا نحن لا نستخدم عادي قط لكن عطش بدلا من ذلك ، منذ ذلك الحين
نحن بحاجة إلى القيام ببعض التحرير الإضافي أثناء التنقل. سنرى لماذا في وقت لاحق، لذلك دعونا ننسى
عنه الآن.

نصل الآن إلى التعليق الرئيسي، ويتم وضع علامة على الملف بوقت التكوين، وهو ملف
النظام المستهدف، وما إلى ذلك... (تلك المتغيرات تأتي من المصدر التكوين.sh تم الملف
أنشأها ضبط). يتبع رأس التعليق حماية "#ifndef" للحماية
ضد تضمينات متعددة لهذا الملف. ثم يأتي قلب الملف..

يساعد على معرفة ذلك $د_* و $i_* يتم تعيين المتغيرات إما على 'حدد"أو"أونديف' بواسطة
ضبط، اعتمادًا على ما إذا كانت الوظيفة أو ملف التضمين موجودًا على النظام أو
لا. وهذا يعني:

#$d_bcopy HAS_BCOPY /**/

سيتم توسيع الخط إما:

#تعريف HAS_BCOPY /**/

إذا تم تعيين المتغير $d_bcopy على "تعريف" أو:

#undef HAS_BCOPY /**/

إذا تم تعيين $d_bcopy على "undef"، لأن الميزة لم تكن موجودة. ومع ذلك، هذا ليس كذلك
ما يكتب في التكوين.ح الملف بسبب عطش الفلتر الذي رأيناه بالفعل،
والذي سيحول النموذج الثاني إلى:

/*#تعريف HAS_BCOPY /**/

هذا نموذج مفيد لتحريره لاحقًا التكوين.ح لأنك تحتاج فقط إلى إزالة
يؤدي إلى "/*" إذا كنت تريد التجاوز ضبطاختيار. وبالمثل، يمكنك إضافة واحدة
"/*" في بداية سطر "#define" لتجنب تعريف رمز معين.
ولهذا السبب تتم حماية كل تعريف رمز بعلامة "/**/" زائدة، لإغلاق المسافة البادئة
تم فتح التعليق بواسطة '/*' (التعليقات غير متداخلة في لغة C).

الآن يعد تحويل "#undef" إلى "/*#define" أمرًا رائعًا، ولكن إذا أردنا كتابة ملف
'#undef'، نحن عالقون... إلا إذا كتبناها كـ '#un-def' ودعنا عطش أصلح ذلك إلى "#undef"
أثناء الإنتاج التكوين.ح، وهو ما يتم فعله هنا بالفعل.

وينطبق نفس النوع من المنطق على هذين الخطين:

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

ويفترض التكوين.sh يحدد:

d_dup2='تعريف'
i_string='undef'

سوف ندخل في المنتجة التكوين.ح:

#تعريف HAS_DUP2 /**/
/*#تعريف I_STRING /**/

صافية كالماء الجاري؟ جيد!

الآن يجب أن يكون واضحا أنه من خلال تضمين التكوين.ح في جميع ملفات مصدر C الخاصة بك، يمكنك الوصول إلى
تعرف ماذا ضبط وقد خمنت على النظام الخاص بك. في الواقع، باستخدام تلك الرموز، أنت كذلك
كتابة رمز C تكوينه، منذ ذلك الحين ميتاكونفيغ سوف تعرف أنك بحاجة إلى تلك الرموز والإرادة
توليد مناسبة config_h.SH الملف وكذلك كافة التعليمات البرمجية اللازمة في ضبط إلى
حساب القيمة المناسبة لهم (عن طريق تعيين قيم لمتغيرات الصدفة المرتبطة).

الركض ميتاكونفيغ
دعونا نركز على ميتاكونفيغ البرنامج لفترة من الوقت لفهم كيفية استخدام وحداته و
كود المصدر الخاص بك لإنتاج كافة ملفات التكوين المطلوبة. إذا كنت تنوي كتابة جديد
الوحدات، يجب أن يكون لديك فهم جيد للمخطط بأكمله.

إذا لم يكن هناك ملف MANIFEST.new، ميتاكونفيغ سيحاول استخدام ملف MANIFEST بدلاً من ذلك،
للراحة. في كل مكان نذكر فيه MANIFEST.new، يمكن فهمه على أنه MANIFEST
بشرط عدم العثور على ملف MANIFEST.new في جذر الحزمة الخاصة بك.

بافتراض أن ملف MANIFEST.new قد تم تعيينه بشكل صحيح ويسرد جميع الملفات المصدر التي ترغب في إدراجها
تكوين، والتي قمت بتشغيلها حزمة في الدليل المصدر الجذر الخاص بك لإنشاء ملف
.حزمة الملف، يمكنك تشغيل ميتاكونفيغ وستحصل على ما يلي:

$ ميتاكونفيغ
تحديد موقع الوحدات...
استخراج قوائم التبعية من 312 وحدة...
استخراج أسماء الملفات (*.[chyl] و*.SH) من MANIFEST.new...
بناء ملف مطلوب...
جارٍ فحص ملفات .[chyl] بحثًا عن الرموز...
يتم الآن فحص ملفات .SH بحثاً عن الرموز...
جارٍ حساب الرسم البياني للتبعية الأمثل...
إنشاء ملف خاص...
تحديد الوحدات القابلة للتحميل...
جارٍ تحديث ملف الصنع...
تحديد الترتيب الصحيح للوحدات...
جارٍ إنشاء التكوين...
القيام به.

تبحث المرحلة الأولى عن كافة ملفات الوحدات (التي تنتهي بـ .U) في الدليل العام
أولا، ثم في الخاص بك. إذا قمت بنسخ ملف عام في دليل U الخاص بك
(أي دليل اسمه U في المستوى الأعلى من الحزمة الخاصة بك)، فإنه سيتجاوز الجمهور
إصدار. وبمجرد حصوله على قائمة بجميع الوحدات المتاحة، فإنه يقوم بتحليلها واستخراجها جميعًا
صنع: خطوط للتعرف على التبعيات ورموز الصدفة المعروفة. إنه أيضًا
يركز على خطوط ?H: للتعرف على رموز C ورموز الصدفة التي يجب أن تكون
تم حسابها للحصول على القيمة المناسبة لرمز C (لذلك لدينا مستوى آخر من التبعيات
هنا).

بعد ذلك، يتم استخراج أسماء الملفات المناسبة من ملفات MANIFEST.new وملف مطلوب الملف هو
مبني: يسرد هذا الملف جميع رموز C ورموز الصدفة اللازمة لتلك الحزمة. نحن
قم أولاً بفحص ملفات النوع C بحثًا عن رموز C، ثم قم بنشر التبعيات إلى ملفاتها
رموز الصدفة المرتبطة (تم جمعها من خطوط ?H:). يتم فحص ملفات .SH التالية وأخيراً
جميع رموز الصدفة معروفة.

تم إنشاء ملف Makefile مؤقت ويحاول metaconfig القيام بذلك جعل جميع رموز الصدفة لنرى
ما هي الأوامر (المدرجة في السطر الثاني؟ MAKE: الأسطر) التي يتم تنفيذها، وبالتالي ما هي الوحدات التي يتم تنفيذها
هناك حاجة حقا. تتم إزالة الوحدات الاختيارية غير المطلوبة ويتم إنشاء ملف Makefile آخر
ولدت. هذه المرة، سنتعرف على جميع الوحدات والطلبات الخاصة بها، وهي اختيارية
تمت إزالة الوحدات وحساب القيم الافتراضية لرموز الصدفة الخاصة بها. ال
ضبط يمكن بعد ذلك إنشاء البرنامج النصي مع config_h.SH. لقد انتهينا.

الاتفاقيات
يجب اتباع الاتفاقيات المناسبة لجعل العملية برمتها سليمة. هناك حالة
اصطلاح للوحدات واصطلاح تسمية المتغير.

يجب أن يكون الحرف الأول الخاص بجميع الوحدات صغيرًا، إلا إذا كانت وحدات خاصة. بواسطة
خاص، نعني أنهم لا يحددون حقًا متغيرات الصدفة الجديدة التي يمكن استخدامها بواسطة
المستخدم في ملفات .SH الخاصة به، بل وحدات تنتج نصوصًا برمجية أو متغيرات shell مخصصة لذلك
يتم استخدامها داخليًا بواسطة ضبط النصي. الأمثلة النموذجية هي الحرف الأول.U الملف الذي هو
تهيئة المتغير الرئيسي، أو Myread.U التي تنتج ال قراءتي البرنامج النصي يستخدم تقريبا
في كل مكان ضبط عندما يتم طرح سؤال على المستخدم.

ثم تنقسم الوحدات غير الخاصة إلى مجموعتين متميزتين: وحدات تحدد المتغيرات
المرتبطة برمز C والوحدات التي تحدد متغيرات الصدفة الخاصة بها. المجموعة الأولى
يتم تقسيمها أيضًا إلى متغيرات تتعلق بتضمين الملفات (يبدأ اسمها بـ i_) و
المتغيرات المتعلقة بالتعريفات الأخرى (الاسم الذي يبدأ بـ d_). المجموعة الثانية لديها
أسماء تمثل نفسها، على سبيل المثال سم مكعب. U يعرف $ سم مكعب متغير الصدفة الذي قيمته
المترجم C الذي سيتم استخدامه.

أحيانًا تحتفظ الوحدات الخاصة لنفسها ببعض المتغيرات المحددة مسبقًا وترجع "النتائج"
وفي غيرها من المتغيرات المعروفة. على سبيل المثال، قراءتي البرنامج النصي من إنتاج Myread.U
تتوقع المطالبة في $RP، الإجابة الافتراضية في $دفلت ويضع إجابة المستخدم $ الجواب.
لم يتم توثيق ذلك في صفحة الدليل هذه: عليك الذهاب وإلقاء نظرة على الوحدة نفسها
فهم المتغيرات المستخدمة وكيفية استخدام الوحدة.

باستخدام قاموس المصطلحات
يتم إنشاء ملف المسرد تلقائيًا بواسطة ملف com.makegloss البرنامج النصي، الذي يستخرج
المعلومات من ?S: و ?C: و ?MAKE: الخطوط وإعادة تنسيقها أبجديًا
مسرد مرتبة. من المهم قراءة المسرد للتعرف على الرموز التي أنت عليها
يسمح للاستخدام. ومع ذلك، لن يخبرك المسرد بكيفية استخدامها. عادة، هذا هو
هذا يعود إليك.

في يوم من الأيام، ربما ستكتب وحداتك الخاصة وستعرف ما يكفي عنها ميتاكونفيغ
للقيام بذلك بسرعة وكفاءة. ومع ذلك، لا تنس أبدًا توثيق عملك بشكل صحيح
خطوط ?S: و ?C:، وإلا فلن يتمكن الأشخاص الآخرون من إعادة استخدامها. تذكر حول
الوقت الذي لم يكن لديك فيه سوى المسرد وهذه الصفحة اليدوية للبدء.

وفي الختام
الآن أنت تعرف ميتاكونفيغ الأساسيات، يجب عليك قراءة الوصف القسم، ثم
انتقل إلى REFERENCE قسم للتعرف على كافة التفاصيل الدموية مثل المسموح بها
بناء الجملة لخطوط التحكم في الوحدة (الخطوط التي تبدأ بـ "؟") أو أوامر MAKE المميزة
مسموح لك باستخدامه.

REFERENCE


يوثق هذا القسم الأجزاء الداخلية من ميتاكونفيغ، في الأساس بناء جملة الوحدة، الخاص
الوحدات التي يجب أن تعرفها وملفات التلميحات.

العلاجات العامة وحدة بناء الجملة
تنقسم وحدة metaconfig إلى قسمين متميزين. قسم الرأس (السطور التي تبدأ
مع '؟") وقسم الصدفة (الكود الذي سيتم تضمينه في ملف ضبط النصي). إنها
من الممكن إضافة تعليقات '?X:' في أي مكان داخل الوحدة، ولكن التعليقات الأخرى '?' خطوط (أيضا
تسمى مراقبة خطوط) لديك سياسة طلب صارمة.

إذا كان خط التحكم طويل جدًا، فمن الممكن استخدام الاستمرارية عن طريق الهروب من النهاية
سطر جديد بخط مائل عكسي ويستمر في السطر التالي (والذي يجب بعد ذلك وضع مسافة بادئة له
بمسافات أو علامات تبويب).

وفيما يلي وصف رسمي لكل من خطوط التحكم. ما لم يذكر
وبخلاف ذلك، فإن ترتيب هذا العرض التقديمي هو الترتيب الذي سيتم استخدامه داخل الوحدة.

?RCS: مجاني نص
ليتم استخدامه لتعليقات RCS، في الجزء العلوي من الوحدة.

؟س: أي وقت نص
تعليقات للأغراض العامة. قد تظهر في أي مكان في الوحدة ولكن يجب تركها مبررة.
للحصول على تعليقات RCS، يرجى استخدام نموذج التعليق RCS:.

؟يصنع:رمز قائمة: التبعية قائمة [+ اختياري]
هذا هو خط التبعية الأول. الأول رمز قائمة يجب أن تدرج كافة الرموز
تم بناؤه بواسطة هذه الوحدة (أي يتم حساب قيمته بواسطة قسم الصدفة للوحدة).
يجب أن تكون الرموز مفصولة بمسافات. إذا كان الرمز المحدد مخصصًا للاستخدام الداخلي فقط و
لا ينبغي أن تظهر في ولدت التكوين.sh الملف، فيجب أن يسبقه ملف
'+' (يجب عدم الخلط بينه وبين التبعيات الاختيارية المحددة فيما بعد). الثاني
جزء من القائمة (بعد المنتصف ':') هو تبعية الوحدة. ينبغي أن قائمة جميع
الوحدات الخاصة المطلوبة، بالإضافة إلى جميع الرموز التي تستخدمها الصدفة
تطبيق. إذا تم إضافة رمز ولكن قيمة تكوينه ليست حرجة، فسيتم ذلك
يمكن أن يسبقه "+"، وفي هذه الحالة يطلق عليه تبعية مشروطة:
سيتم تحميل الوحدة المقابلة إذا، وفقط إذا، كان هذا الرمز بخلاف ذلك حقًا
مطلوب؛ وإلا سيتم استخدام القيمة الافتراضية.

؟يصنع:علامة التبويب أمر
يمكن أن يكون هناك سطر أوامر واحد أو أكثر يتبع خطوط التبعية الأولية. أولئك
سيتم تنفيذ الأوامر عندما تكون الوحدة مطلوبة لتحميلها فيها ضبط. شاهد
الفقرة حول إصدار الأوامر لمزيد من المعلومات. لاحظ أن الرائدة علامة التبويب
الحرف مطلوب قبل أمر.

؟ص:نسق
قم بإعلان توجيه التخطيط لهذه الوحدة. قد يكون هذا التوجيه أحد السلاسل
تيشرت, الافتراضي or أسفل (الحالة لا يهم، الأسلوب الموصى به هو توضيحها
بأحرف كبيرة). إذا تم حذفها، الافتراضي يفترض.

هذا التوجيه مطلوب فقط إذا كنت ترغب في فرض وحدة في الأعلى أو الأسفل
من المتولدة ضبط البرنامج النصي، كما تسمح به تبعيات الوحدة. مهم
وبالتالي قد يتم فرض الأسئلة في البداية. ضمن نفس فئة التخطيط، الوحدات
يتم فرزها أبجديًا مع حالتين خاصتين لوحدات d_* وi_*، قسرية
على التوالي في أعلى وأسفل فصولهم (ولكن يجب أن تنتمي هذه إلى
الفئة الافتراضية).

أنت تجبر في الأعلى وحدة تتطلب تبعياتها من جميع الوحدات الأخرى
تسبقها، فإنك لا تحقق شيئًا مثيرًا للاهتمام. ولذلك، ينبغي لهذا التوجيه حقا
يمكن استخدامها لزيادة أولوية بعض الوحدات التفاعلية التي لا تعتمد على الكثير
الرموز الأخرى المرئية للمستخدم، مثل الأسئلة المتعلقة بالمسار.

؟س:رمز_اسم [(مهمل رمز قائمة)]:
يقدم رمز الصدفة. يقوم هذا السطر الأول بتسمية الرمز، متبوعًا بشكل اختياري بـ a
القائمة محاطة بين قوسين وإعطاء المعادل القديم. تلك عفا عليها الزمن
سيتم إعادة تعيين الرموز إلى الجديد رمز_اسم إذا كان -o يتم إعطاء الخيار ل
ميتاكونفيغ.

؟س:أي وقت النص، For قاموس المصطلحات
في الأساس تعليق يصف رمز الصدفة الذي سيتم استخراجه بواسطة com.makegloss
في ملف المسرد.

؟س:. يغلق تعليق رمز الصدفة.

؟ج:رمز_اسم [~ الاسم المستعار] [(مهمل رمز قائمة)]:
يقدم رمز C جديد. ال الاسم المستعار الاسم هو الاسم الذي سيوضع تحته رمز C
يمكن السيطرة عليها، أي إذا كان الاسم المستعار الرمز مطلوب، ثم سيتم كتابة رمز C
في ال config_h.SH ملف. عادةً ما يكون الاسم المستعار هو '%<' (يرمز إلى اسم الوحدة)
وهناك أيضًا خط W: يرسم رمز C إلى الاسم المستعار. وكذلك الأجزاء ذات الصلة
من خطوط ?H: محمية بشكل صريح بشرط '?%<'. انظر الرمز
الفقرة المستعارة لمزيد من التفاصيل. ما تبقى من السطر هو اختياري
مهمل رمز قائمة، الذي يسرد المعادلات القديمة للجديد رمز_اسم.

؟ج:أي وقت النص، For قاموس المصطلحات و config_h.SH
في الأساس تعليق يصف رمز C، والذي سيتم استخراجه بواسطة com.makegloss
في ملف المسرد وبواسطة ميتاكونفيغ في config_h.SH الملف إذا كان الرمز
مطلوب (أو إذا كان الاسم المستعار الخاص به مطلوبًا عند استخدام الأسماء المستعارة للرمز).

؟ج:. إغلاق تعليق الرمز C.

?ح:?رمز:config_h.SH أشياء
هذا هو طلب التضمين العام في config_h.SH. لا يتم كتابة السطر إلا عندما
الحراسة رمز مطلوب حقا. هذا النموذج العام مطلوب عند رمز C
تم استخدام الاسم المستعار. بخلاف ذلك، إذا كنت تستخدم أحد النماذج "القياسية" الأخرى، فسيتم
تتم الحراسة تلقائيا عن طريق ميتاكونفيغ نفسها.

ح:#$d_var VAR "فار دولار"
يحدد بشكل مشروط VAR رمز C في فار دولار متى تم ضبطه على "حدد'. يعني أ
'?VAR:' شرط الحراسة، و ميتاكونفيغ الروابط تلقائيا VAR إلى قوقعته الثانية
التبعيات المتغيرة (أي كليهما $d_var و فار دولار سيتم وضع علامة على أنها مطلوب if VAR is
المستخدمة في مصادر C).

؟ح:#تعريف VAR [اختياري نص]
يحدد دائما VAR رمز C لبعض القيمة. يعني "؟"VAR:' شرط الحراسة.
يتم إنشاء تبعية الصدفة التلقائية للوحدة نفسها.

؟ح:#تعريف فار(س،ص،ض) فار دولار
يحدد دائما الماكرو VAR أن تكون قيمة فار دولار عامل. الأمر متروك ل
وحدة لضمان فار دولار يحمل قيمة معقولة. التبعية التلقائية بين C
الماكرو VAR ويتم إنشاء متغير الصدفة، ويتم حماية الخط بأكمله بواسطة ملف
ضمني'؟VAR:'.

ح:#$d_var VAR
يحدد بشكل مشروط VAR if $d_var تم ضبطه على "حدد'. يعني "؟"VAR:' حراسة
حالة. يتم إنشاء تبعية Shell تلقائية نحو $d_war.

؟ح:#تعريف VAR "فار دولار"
يعين قيمة تم تكوينها لـ VAR رمز ج. يعني "؟"VAR:' شرط .
يتم إنشاء تبعية Shell تلقائية للارتباط VAR و فار دولار.

؟ح:. يغلق config_h.SH طلبات الادراج.

؟م:C رمز: C التبعيات
يقدم تعريفًا سحريًا يتعلق برمز C، لـ confmagic.h، ويحدد
رمز الحراسة لما تبقى من تعريفات ?M. هذا الخط يعني بصمت
'?W:%<:C رمز'، أي أنه سيتم تحميل الوحدة في التكوين إذا ظهر الرمز C
داخل مصادر C، سواء تم استخدام السحر أم لا. يتم تنشيط تبعيات C
عندما يتم استخدام السحر، من أجل فرض تعريفهم config_h.SH. ومع ذلك، إذا
السحر هو ليس تم استخدامه ولكن رمز C يظهر في المصدر بدون حرف C المطلوب
التبعيات، سيتم تحذيرك في كل مرة يتم فيها إنشاء الملف المطلوب، لأنه قد يكون كذلك
مشكلة في قابلية النقل (وأيضًا بسبب تحميل الوحدة دون قيد أو شرط في
قم بالتكوين عند استخدام الرمز C، بغض النظر عن خطوط ?C: الأخرى من
وحدة).

؟م:حزب الشعب الكمبودي defs
يحدد تعيين CPP السحري الذي سيتم تقديمه في confmagic.h عندما يتعلق الأمر بذلك
يتم استخدام الرمز. هناك ضمنا '؟SYM"الحراسة حيث SYM هو اسم الرمز
يحددها السطر ?M: البادئ.

؟م:. يغلق confmagic.h طلب الادراج.

؟ث:قذيفة رمز قائمة:C رمز قائمة
يربط مصير رموز الصدفة بمصير رموز C: إذا وجد أي من رموز C
الرموز المدرجة مطلوبة، ثم يتم وضع علامة على جميع رموز الصدفة على أنها مطلوبة. مفيد ل
فرض إدراج وحدة (تم تعيين قائمة رموز الصدفة على '%<') عند وجود بعض C
تم الكشف عن الرمز. يمكن ترك قائمة رموز الصدفة فارغة للاستفادة من الجانب
تأثير موقع رمز C داخل المعالج المسبق المدمج (الرمز هو تعريف
لهذا المعالج المسبق إذا كان موجودًا في المصدر). للبحث عن الأنماط مع الفضاء
فيها، تحتاج إلى اقتباس رموز C ضمن علامات اقتباس بسيطة، كما في "struct."
وحدة زمنية'.

؟الخامس:للقراءة فقط رموز:للقراءة والكتابة رموز
هذا هو ميتالينت تلميح ويجب استخدامه فقط في الوحدات الخاصة التي تصدر بعض الصدفة
المتغيرات. يتم تصدير المتغيرات الموجودة قبل المنتصف ':' للقراءة فقط (تغييرها
سيصدر تحذيرًا)، في حين يمكن قراءة الرموز الأخرى وتغييرها بحرية.

؟F:ملفات خلق
يخدم هذا الخط غرضين: إنه ملف ميتالينت تلميح ، وكذلك عنصر نائب لـ
مستقبل jmake يستخدم. يجب أن يسرد ثلاثة أنواع من الملفات: المؤقت وهو
تم إنشاؤها للاختبار ، وحدات UU الخاصة التي تم إنشاؤها في دليل UU لاحقًا
perusal ، والعامة التي تركت في الدليل الجذر للحزمة. مؤقت
يجب أن يتم سرد الملفات بعلامة '!' سابقة حرف (بمعنى "لا! لا يتم إعادة استخدامها
لاحقًا! ") ، يجب أن يسبق ملفات UU الخاصة بـ" ./ "(بمعنى: لاستخدامها ، قل
./ملف، وليس فقط ملف) ، ويجب تسمية العناصر العامة كما هي.

؟ T:قذيفة المؤقت
آخر ميتالينت تَلمِيح. يسرد هذا السطر كافة متغيرات الصدفة المستخدمة كمتغيرات مؤقتة
داخل قسم الصدفة لهذه الوحدة.

؟د:رمز='قيمنا'
قيمة التهيئة للرموز المستخدمة كتبعيات مشروطة. إذا لم يكن هناك ؟D: الخط هو
تم العثور عليه، ثم يتم استخدام قيمة فارغة بدلاً من ذلك. ال ميتالينت سوف يحذرك البرنامج إذا أ
يتم استخدام الرمز مرة واحدة على الأقل باعتباره تبعية مشروطة ولا يحتوي على رمز مناسب
؟د: التهيئة. إنها ممارسة جيدة لإضافة تلك السطور حتى لو كانت فارغة
التهيئة لأنها تؤكد على الطبيعة الاختيارية المحتملة للرمز.

؟يا:أي وقت الرسالة لصحتك! تريد
يشير هذا التوجيه إلى أن هذه الوحدة عفا عليها الزمن ككل. كلما استخدم أي
يتم إجراء رموزها (أو الاستخدام غير المباشر عبر التبعيات)، ويتم إخراج الرسالة
الشاشة (على ستدير). يمكنك وضع سطر واحد أكثر، وفي هذه الحالة سيتم وضع كل سطر
تتم طباعتها، بالترتيب.

رابط:ميتالينت تلميحات
رؤية ميتالينت صفحة دليل لشرح التلميحات المميزة التي يمكن أن تكون
مستخدم.

؟فيه:التهيئة الكود
سيتم تحميل رمز التهيئة المحدد بهذا السطر في الجزء العلوي من الملف
ضبط البرنامج النصي بشرط أن تكون الوحدة مطلوبة.

C رمز اسم مستعار
في بعض الأحيان لا يمكن الاعتماد عليها ميتاكونفيغالتحديد الافتراضي الخاص بـ config_h.SH
التعليقات وتعريف رمز C. وهنا يأتي دور الاسم المستعار. وبما أنه بالأحرى
من الصعب شرح ذلك، سندرس مثالاً لفهم الآلية الأساسية.

تحاول وحدة d_const.U تحديد ما إذا كان برنامج التحويل البرمجي الخاص بك يعرف عن ملف C أم لا CONST
الكلمة الرئيسية. إذا لم يكن الأمر كذلك، فنحن نريد إعادة تعيين تلك الكلمة الرئيسية إلى سلسلة فارغة، من أجل السماح لـ
تجميع البرنامج. علاوة على ذلك، نريد تشغيل الاختبار تلقائيًا عندما يكون CONST كلمة
.

فيما يلي الأجزاء ذات الصلة بوحدة d_const.U:

?MAKE:d_const: cat cc ccflags Setvar
?اصنع: -اختر إضافة $@ %
؟س:d_const:
?S: يقوم هذا المتغير بتعريف رمز HASCONST بشكل مشروط
?S: يشير إلى برنامج C الذي يعرفه مترجم C هذا
?S: نوع ثابت.
؟س:.
؟C:هاسكونست ~ %<:
?C: يشير هذا الرمز، إذا تم تعريفه، إلى أن مترجم لغة C هذا يعرف عنه
؟C: نوع الثابت. ليست هناك حاجة لاختبار هذا الرمز فعليًا
؟ج: ضمن برامجك. إن مجرد استخدام الكلمة الأساسية "const" سيؤدي إلى ذلك
?C: قم بإجراء الاختبارات اللازمة.
؟ج:.
?H:?%<:#$d_const HASCONST /**/
?H:?%<:#ifndef HASCONST
?H:?%<:#define const
?H:?%<:#endif
؟ح:.
?W:%<:const
؟لينت:تعيين d_const
?لينت: ثابت معروف
: تحقق من الكلمة الأساسية const
صدى صوت " "
echo 'يتم الآن التحقق لمعرفة ما إذا كان برنامج التحويل البرمجي للغة C الخاص بك يعرف عن "const"...' >&4
/ بن / قطة >const.c <<'EOCP'
الأساسية()
{
const char *foo;
}
EOCP
إذا $cc -c $ccflags const.c >/dev/null 2>&1 ; ثم
فال = "$ تعريف"
صدى "نعم، إنه كذلك."
آخر
فال = "$Undef"
صدى "كلا، لا يحدث."
fi
تعيين d_const
إيفال $setvar

أولاً نلاحظ استخدام سطر ?W: الذي يقول بشكل أساسي: "هذه الوحدة مطلوبة عندما
CONST يتم استخدام الكلمة الأساسية في ملف C.". من أجل إعادة التخطيط المشروط CONST إلى فارغة
سلسلة في التكوين.ح، اخترت التحديد المشروط هاسكونست بواسطة $d_const.

ومع ذلك، فإن هذا يثير مشكلة، لأن هاسكونست لن يتم استخدام الرمز في
المصادر، فقط CONST الرمز المميز هو. و؟H: تحديد الخط هاسكونست ضمنا
تحت حراسة '؟HASCONST'. لذلك، يجب علينا إضافة القيد الصريح '?%<' لنقوله
ميتاكونفيغ أن تلك الخطوط ينبغي أن تدرج في config_h.SH عندما يظهر الرمز '%<'
يصبح مطلوبًا (%< يشير إلى اسم الوحدة، هنا d_const).

هذا مثالي تقريبًا، لأن سطر ?W: سوف يرغب في ذلك d_const كلما CONST يستخدم إذن
سيتم تضمين خطوط ?H: في config_h.SH ملف. ومع ذلك، التعليق الرئيسي (؟C:
الخطوط) المرفقة هاسكونست هو في حد ذاته حراسة أيضا عبر هاسكونست، أي أنه يحتوي ضمنا
القيد '؟HASCONST'. ومن هنا جاءت الحاجة إلى التعرج ال هاسكونست الرمز إلى '%<'.

الجزء المتبقي من الوحدة (جزء الصدفة) واضح ومباشر حقًا. انها ببساطة
يحاول تجميع نموذج برنامج C باستخدام CONST الكلمة الرئيسية. إذا كان يستطيع، فسوف يفعل
حدد $d_const عبر $setvar الوظيفة (المحددة بواسطة سيتفار.U وحدة). انظر الفقرة
حول الوحدات الخاصة لمزيد من التفاصيل.

المصنع أوامر
في سطر الأوامر MAKE:، يمكنك كتابة أمر shell ليتم تنفيذه كما هو أو
تختص -يختار الأمر الذي المحاصرين من قبل ميتاكونفيغ وتحليلها لمعرفة ما ينبغي أن يكون
منتهي. البادئة "-" موجودة فقط للمنع جعل من الفشل عند عودة الأمر
حالة غير صفرية - ليست هناك حاجة إليها حقًا لأننا نستخدم "جعل -n" لحل
التبعيات، ولكن أنصحك بالاحتفاظ بها في حال أصبحت إلزامية في الإصدارات المستقبلية.
بناء جملة اختيار الأمر هو:

-يختار كمد $@ الملف الهدف

أين $@ هو الماكرو القياسي داخل Makefiles الذي يمثل الهدف الحالي (الاسم
للوحدة الجاري بناؤها، مع إزالة الامتداد .U النهائي). ال كمد الجزء هو
يقدم ميتاكونفيغ الأمر المراد تشغيله، و الملف الهدف هي معلمة أخرى، والتي
التفسير يعتمد على كمد بحد ذاتها. كما تم تجريد ملحق .U النهائي الخاص به و
يشير عادةً إلى ملف وحدة، إلا إذا كان يبدأ بـ "./" وفي هذه الحالة يشير إلى ملف وحدة
ل ميتاكونفيغ ملفات التحكم في ".MT الدليل.

الأوامر المتوفرة هي:

إضافة يضيف الملف الهدف إلى ضبط.

add.Config_sh
يملأ هذا الجزء من ضبط إنتاج التكوين.sh ملف. تستخدم فقط
تتم إضافة المتغيرات، ويتم إضافة المتغيرات الشرطية (من التبعيات الشرطية).
تم تخطيه.

add.Null يضيف القسم الذي يقوم بتهيئة جميع متغيرات الصدفة المستخدمة في سلسلة فارغة.

c_h_weed ينتج config_h.SH ملف. تتم طباعة الأسطر الضرورية فقط.

cm_h_weed ينتج confmagic.h ملف. تتم طباعة الأسطر الضرورية فقط. هذا
يتم تمكين الأمر فقط عندما يكون -M يتم إعطاء التبديل، أو عندما أ confmagic.h ملف
موجود مسبقا.

Close.Config_sh
يضيف رمز "EOT" النهائي على سطر بمفرده لإنهاء المستند هنا
بناء إنتاج التكوين.sh ملف.

يُلحق مسبقًا محتوى الهدف بـ الملف الهدف إذا كان هذا الملف ليس فارغا.

الاعشاب يضيف الوحدة إلى ضبط مثل تضيف الأمر، ولكن إجراء بعض الاختبارات الإضافية
لإزالة '؟رمز' و '٪رمز"خطوط من الملف الهدف إذا كان الرمز
غير مرغوب فيه أو مطلوب بشروط. يتم استخدام النموذج '%' داخليًا فقط بواسطة
ميتاكونفيغ أثناء إنتاج ملفات .U الخاصة بها في '.MT' الدليل.

مسح نفس تضيف حقًا، ولكنه يقوم باستبدال ماكرو إضافي. ال
يتم وصف وحدات الماكرو المتوفرة في ماثلة وحدات الماكرو الفقرة.

كملاحظة جانبية، ميتاكونفيغ يولد أ -كوند الأمر داخليا للتعامل مع المشروطة
التبعيات. يجب ألا تستخدمه بنفسك، ولكنك ستراه إذا قمت بمسح الملف ضوئيًا
ولدت ماكيفيلي في ال .MT الدليل.

ماثلة وحدات الماكرو
يتم التعرف على وحدات الماكرو التالية بواسطة مسح الأمر واستبداله قبل إدراجه في
ضبط:

رقم المراجعة الأساسي للحزمة، المشتق من .حزمة.

التاريخ الحالي.


عنوان البريد الإلكتروني لمشرف هذه الحزمة، مشتق من عنوانك
.حزمة.


اسم الحزمة، كما هو مشتق من الخاص بك .حزمة ملف.


مستوى التصحيح ميتاكونفيغ البرنامج (موقوف لصالح ).


مستوى مراجعة SVN لـ ميتاكونفيغ برنامج.

رقم الإصدار ميتاكونفيغ برنامج.

تُستخدم وحدات الماكرو هذه بشكل أساسي لتحديد ميتاكونفيغ الإصدار الذي أنشأ ملف
خاص ضبط البرنامج النصي والحزمة التي تم ذلك. عنوان البريد الإلكتروني لل
يتم تثبيت المشرف في التعليمات الرائدة التي ضبط يطبع عند البدء.

الأخيرة ميتاكونفيغ تفهم الإصدارات بناء جملة أكثر عمومية للنموذج:

<$متغير>

والتي يتم استبدالها في وقت تكوين التكوين بقيمة متغير مأخوذة من الخاص بك
.حزمة ملف. في النهاية، سيختفي تنسيق الماكرو القديم، و<$baserev>
سوف يستبدل في جميع الوحدات الموردة.

ملصقات خاصة الوحدات
يتم استخدام الوحدات الخاصة التالية لتحليل الكود وتوفير مستوى أعلى
وظائف. إنهم إما ينتجون نصًا برمجيًا يمكن الحصول عليه من مصادر أو صدفة
المتغير الذي يمكن أن يكون وحدة التقييم'إد. ويتم تمرير المعلمات عبر متغيرات معروفة أيضًا
مسمى أو مجهول مثل $1، $2، وما إلى ذلك... (والتي يمكن ضبطها بسهولة عبر Shell طقم
المشغل أو العامل). متى ضبط ينفذ ويخلق ويدخل في ملف UU الدليل، لذلك كل
يوجد البرنامج النصي المنتج هناك ولا يتداخل مع الملفات الموجودة في الحزمة الخاصة بك.

فيما يلي الوحدات الخاصة التي يجب أن تعرفها وطريقة استخدامها.

كبسيم. يو
تنتج هذه الوحدة برنامجًا نصيًا يسمى كبسيم، والتي يمكن استخدامها لتحديد
ما إذا كان يتم تعريف أي رمز في القائمة بواسطة معالج C المسبق أو مترجم C لديك
محدد. يمكنه تحديد حالة أي رمز، على الرغم من وجود الرموز فيه
(قائمة السمات) يتم تحديدها بسهولة أكبر.

Csym.U
يؤدي هذا إلى تعيين متغير Shell $csym، المستخدم داخليًا بواسطة ضبط للتحقق مما إذا كان ملف
يتم تعريف رمز C معين أم لا. الاستخدام النموذجي هو:

تعيين نتيجة الرمز [-fva] [السابق]
إيفال $csym

من شأنها أن تحدد نتيجة متغير إلى "صحيح" إذا كانت الدالة [-f] أو المتغير [-v] أو
يتم تعريف المصفوفة [-a]، وإلا فهي "خطأ". إذا تم إعطاء قيمة سابقة و -r
تم توفير التبديل ل ضبط (انظر ضبط مزيد من الخيارات الفقرة)، ثم ذلك
يتم إعادة استخدام القيمة دون استجواب.

تعتمد طريقة إجراء هذا الحساب على الإجابة التي يقدمها المستخدم على السؤال
ضبط سوف يسأل حول ما إذا كان ينبغي إجراء nm استخراج أم لا. إذا
تم إجراء الاستخراج، وتقوم الوحدة ببساطة بالبحث في قائمة الرموز، وإلا
فإنه ينفذ اختبار الارتباط الترجمة، ما لم -r أعطيت لإعادة استخدام المحسوبة سابقا
القيمة بطبيعة الحال...

نهاية.U
عن طريق نسخ هذه الوحدة إلى جهازك الخاص U الدليل وإلحاق التبعيات على
اصنع: خط، يمكنك فرض تحميل وحدة معينة فيه ضبط حتى لو لم يكن كذلك
أراد خلاف ذلك. قد يتم إجبار بعض الوحدات فقط على الدخول ضبط بهذه الطريقة.

Filexp.U
تنتج هذه الوحدة برنامج نصي شل فيلكسب والتي سوف توسع أسماء الملفات التي تبدأ بـ
التلدة. الاستخدام النموذجي هو:

exp_name=`./filexp $name`

لتعيين اسم الملف الموسع في exp_name.

Findhdr.U
تنتج هذه الوحدة أ findhdr البرنامج النصي الذي يستخدم لتحديد موقع ملفات الرأس في
$usrinc أو أماكن أخرى غريبة تستخدم إمكانيات CPP. يتم إعطاء البرنامج النصي
تضمين اسم الملف الأساسي مثل "stdio.h" أو "sys/file.h" ويقوم بإرجاع المسار الكامل للملف
ملف inlcude وحالة الصفر إذا وجدت، أو سلسلة فارغة وحالة غير صفرية
إذا تعذر تحديد موقع الملف.

Getfile.U
تنتج هذه الوحدة القليل من كود القشرة الذي يجب الحصول عليه من مصدر للحصول على ملف
اسم وإجراء بعض الشيكات التعقل. بشكل اختياري، يتم تنفيذ توسيع ~name.

لاستخدام هذه الوحدة، $RP و $دفلت يجب أن يحمل السؤال والإجابة الافتراضية، والتي
سيتم تمريرها كما هي إلى قراءتي البرنامج النصي (انظر المقبلة Myread.U). ال $fn
يتحكم المتغير في العملية ويتم إرجاع النتيجة إليها $ الجواب.

لتحديد موقع ملف أو دليل، ضع "f" أو "d" فيه و~/. إذا ظهر "~"، ثم ~الاسم
مسموح بالاستبدال. إذا ظهر "/"، فسيتم قبول أسماء المسارات المطلقة فقط و
~ يتم دائمًا توسيع عمليات استبدال الأسماء قبل العودة. إذا تم تحديد "+"،
يتم تخطي عمليات التحقق من الوجود. إذا ظهر "n" في الداخل $fn، ثم يُسمح للمستخدم بذلك
أجب بـ "لا شيء".

عادة، ما لم تطلب إمكانية النقل، يتم استبدال الاسم عند الطلب.
ومع ذلك، هناك بعض الأوقات التي ترغب فيها بتجاوز إمكانية النقل وفرض الأمر
الاستبدال. يمكنك استخدام الحرف "e" (توسيع) للقيام بذلك.

إذا تم استخدام النوع "l" (تحديد الموقع) الخاص، فسيتم استخدام $fn يجب أن ينتهي المتغير بـ ':'،
متبوعًا بالاسم الأساسي للملف. إذا كانت الإجابة دليلا، فسيكون الاسم الأساسي للملف
تم إلحاقه قبل اختبار وجود الملف. وهذا مفيد في تحديد نمط الأسئلة
مثله:

dflt='~أخبار/lib'
: لا حاجة لتحديد "d" أو "f" عند استخدام "l".
الجبهة الوطنية = 'ل~:نشط'
rp='أين الملف النشط؟'
. ./خذ الملف
نشط = "$ الجواب"

بالإضافة إلى ذلك، يمكن استخدام الحرف "p" (المسار) جنبًا إلى جنب مع الحرف "l" للتوضيح
خذ الملف أنه يجب قبول الإجابة التي لا تحتوي على "/" على افتراض أنها ستفعل
يكون في مسار الجميع في الوقت الذي ستكون فيه هذه القيمة مطلوبة.

من المفيد أيضًا إمكانية تحديد قائمة الإجابات التي يجب قبولها
حرفيا، وتجاوز جميع الشيكات. يجب أن تكون هذه القائمة بين قوسين وعناصر
يجب أن تكون مفصولة بفواصل، مع عدم وجود مسافات متداخلة. لا تنسى أن تقتبس
السلسلة الناتجة بين قوسين تكون ذات معنى للقذيفة. على سبيل المثال:

دفلت='/بن/تثبيت'
fn='/fe~(تثبيت,./تثبيت)'
rp='أي برنامج تثبيت يستخدم؟'
. ./خذ الملف
التثبيت = "$ans"

سيسمح للمستخدم فقط بتحديد المسارات المؤهلة بالكامل التي تشير إلى الملفات الموجودة،
ولكن لا يزال يسمح بإجابات "تثبيت" و"./install" الخاصة كما هي (بافتراض
بالطبع سوف يتعامل معهم شيء ما بشكل خاص لاحقًا في السلسلة منذ أن فعلوا ذلك
لا يتوافق مع الإطار العام المتوقع).

إذا كانت الإجابة على السؤال "لا شيء"، فسيتم تخطي عمليات التحقق من الوجود و
يتم إرجاع السلسلة الفارغة. لاحظ أنه منذ ذلك الحين خذ الملف المكالمات قراءتي داخلياً، جميعاً
الميزات المتوفرة مع قراءتي تنطبق هنا ل.

إذا كانت هناك حاجة إلى قيمة موسعة بالكامل (على سبيل المثال في Makefile)، فيمكنك استخدام
ال $ansexp المتغير الذي يتم إعداده دائمًا بشكل صحيح بواسطة خذ الملف كما توسعت
نسخة من $ الجواب. بالطبع، لن يتم توسيع ~name إذا لم تسمح بذلك في ملف
المركز الأول في $fn المتغير.

Inhdr.U
تنتج هذه الوحدة $inhdr متغير الصدفة، يستخدم داخليًا بواسطة ضبط للتحقق من
ما إذا كانت هناك مجموعة من الرؤوس أم لا. الاستخدام النموذجي هو:

تعيين الرأس i_header [ header2 i_header2 ... ]
تقييم $inhdr

سيؤدي ذلك إلى طباعة رسالة توضح ما إذا تم العثور على الرأس أم لا وتعيين
i_header متغير وفقا لذلك. إذا تم تحديد أكثر من رأس والأول
لم يتم العثور على الرأس، نحاول التالي، حتى تصبح القائمة فارغة أو يتم العثور على رأس واحد.

Inlibc.U
تنتج هذه الوحدة $inlibc متغير الصدفة، يستخدم داخليًا بواسطة ضبط للتحقق من
ما إذا تم تعريف وظيفة C معينة أم لا. الاستخدام النموذجي هو:

تعيين وظيفة d_func
تقييم $inlibc

سيؤدي ذلك إلى طباعة رسالة توضح ما إذا تم العثور على الوظيفة أم لا وتعيينها
$d_func وفقاً لذلك. وفي الداخل استخدم $csym نمط.

لوك. يو
تنتج هذه الوحدة المهمة برنامج نصي Shell الكونغرس والتي يمكن استخدامها لمعرفة أين
في قائمة الدلائل يكمن ملف معين. تحدد الوسيطة الأولى الملف
يتم تحديد موقعه، والوسيطة الثانية هي ما سيتم إرجاعه إذا فشل البحث، و
وسيطات إعادة التدوير هي قائمة من الدلائل التي سيتم البحث فيها عن الملف. ل
نموذج:

dflt=`./loc sendmail.cf X / البيرة / ليب /var/lib/sendmail / ليب`

سوف تحدد $دفلت إلى X إذا لا Sendmail.cf تم العثور على الملف ضمن الدلائل المدرجة،
أو شيء من هذا القبيل /usr/lib/sendmail.cf على بعض الأنظمة. أنظر أيضا Getfile.U.

MailAuthor.U
يجب تضمين هذه الوحدة في خط "MAKE:" الخاص بـ End.U الخاص بك
هو داخل ضبط. ويقدم للمستخدم تسجيل نفسه للمؤلف، اختياريا
يتم إعلامك عند وصول تصحيحات جديدة أو استلامها تلقائيًا عند إصدارها.
تحتاج إلى تثبيت تاجر البريد للقيام بذلك (على الأقل الإصدار 3.0).

MailList.U
يجب تضمين هذه الوحدة في خط "MAKE:" الخاص بـ End.U الخاص بك
هو داخل ضبط. ويقدم للمستخدم الاشتراك أو إلغاء الاشتراك في القائمة البريدية
حيث تجري المناقشات المتعلقة بالحزمة. أنت بحاجة للتشغيل باكينيت
والإجابة على الأسئلة المتعلقة بالقائمة البريدية لإعداد المتغيرات المناسبة في حسابك
.حزمة قبل أن تصبح هذه الوحدة جاهزة للعمل.

مينيت. يو
انسخ هذه الوحدة إلى جهازك الخاص U الدليل لإضافة القيم الافتراضية الخاصة بك إلى بعض
المتغيرات الداخلية. يتم تحميل هذه الوحدة في ضبط بعد كل الافتراضي
تم إجراء عمليات التهيئة.

Myread.U
تنتج هذه الوحدة قراءتي برنامج شل النصي الذي يجب الحصول عليه من أجل القيام بـ
يقرأ. فهو يسمح بالهروب من الصدفة والتعيين الافتراضي وتقييم المعلمات، مثل
موثقة في وحدة Instruct.U. كما يسمح أيضًا بالإعداد الديناميكي لل -d اختيار،
والتي سيتم استخدامها لبقية تنفيذ البرنامج النصي.

لاستخدام هذه الوحدة، $RP يجب أن يحمل السؤال و $دفلت يجب أن يحتوي على الافتراضي
إجابة. ستتم طباعة السؤال بواسطة البرنامج النصي نفسه، وسيتم إرجاع النتيجة
في ال $ الجواب المتغير.

هنا استخدام نموذجي:

دفلت='ص'
rp='سؤال؟'
. ./myread
القيمة = "$ الجواب"

انظر الوحدة نفسها لمزيد من المعلومات.

Oldconfig.U
يجب أن تكون هذه الوحدة جزءًا من تبعيتك ?MAKE: سطر عندما تحاول بعض الوحدات الخاصة بك
لإعادة استخدام قيمة الرمز القديم. هذه الوحدة مسؤولة عن الحصول على الإجابات القديمة
تبدأ من التكوين.sh أو تقديم تلميحات مفيدة عند التشغيل على منصة معينة لـ
اول مرة. انظر ضبط إشارة فقرة لمزيد من المعلومات حول التلميحات.

البادئة.U
الغرض من هذه الوحدة هو اكتشاف التغييرات في دليل بادئة التثبيت
إعادة حساب الإعدادات الافتراضية المناسبة تلقائيًا من الإجابات السابقة. ويعتمد على
قيمة $oldprefix المتغير الذي يحمل دليل البادئة السابقة عندما يكون
تغيرت، وهي فارغة على خلاف ذلك. على سبيل المثال، إذا تم تغيير البادئة من / الأراضي الفلسطينية المحتلة إلى
/ البيرة / المحلية، فسيتم تغيير دليل التثبيت الثنائي السابق من
/ اختيار / بن إلى / البيرة / المحلية / بنأو سيبقى دون تغيير إذا كان، على سبيل المثال، / بن.

تحتاج إلى الاتصال طقم قبل إصدار وحدة التقييم on $بادئة، مثل:

تعيين dflt فار [دير]
بادئة إيفال $

والتي من شأنها أن تحدد $دفلت إلى فار دولار or $بادئة/دير اعتمادًا على ما إذا كانت البادئة باقية
نفس أم لا. لو دير هي السلسلة لا شيء، قيمة مسافة واحدة في $دفلت يتم الاحتفاظ بها كما-
هو، حتى عندما تتغير البادئة. لو دير تم حذفه ، إذن $دفلت تم ضبطه على فارغ
سلسلة إذا تغيرت البادئة، إلى فار دولار غير ذلك.

البادئة.U
الغرض من هذه الوحدة مشابه لهدف Prefixit.U، أي أنه يساعد في إصلاح المشكلة
السلسلة الافتراضية لاستيعاب تغييرات البادئة. ومع ذلك، فإن قذيفة المتغير $بادئة,
عند التقييم، سيتم استعادة توسيعات ~ الاسم فقط، ويجب أن تستخدم البادئة مثل هذا الهروب
آلية. استخدامه على النحو التالي:

تعيين dflt
EVAL $البادئة

قبل المطالبة عبر خذ الملف على سبيل المثال. إذا كانت البادئة لا تستخدم ~name
التوسعة، فإن ما سبق سيكون محظورًا على y متغير، بطبيعة الحال.

Typedef.U
تنتج هذه الوحدة $typedef متغير الصدفة، يستخدم داخليًا بواسطة ضبط للتحقق من
ما إذا كان typedef موجودًا أم لا. الاستخدام النموذجي هو:

تعيين typedef val_t الافتراضي [يشمل]
إيفال $typedef

هذا سوف يحدد المتغير val_t لقيمة الافتراضي إذا لم يتم العثور على typedef
من بين المدرجة تشمل الملفات، أو typedef و ان وجد. إذا لم يكن هناك ملفات تضمين
المحدد، تبحث الوحدة في فقط. إذا قمت بتحديد بعض يشمل، فقط
يتم النظر إلى تلك.

يونكس. يو
الغرض من هذه الوحدة هو تعريف بعض أنظمة UNIX الأكثر شيوعًا عبر المتغيرات
والتي يمكن تغييرها من سطر الأوامر أو عبر ملفات التلميحات المناسبة. بخاصة،
$_exe, $_o و $_a تم تعيينها. وينبغي لجميع الوحدات الرجوع إلى $_o وليس ل .o مباشرة.
ال '.' هو جزء من هذه المتغيرات.

سيتفار.U
تنتج هذه الوحدة المتغير الذي يتم استخدامه داخليًا بواسطة ضبط لتعيين
حدد/ قيمة undef لرمز معين، وإصدار تحذير عندما يتغير فجأة
من القيمة السابقة. على سبيل المثال:

فال = "$ تعريف"
تعيين d_variable
إيفال $setvar

إذا كان السابق $d_variable كانت القيمة غير فارغة و $ val مختلف، "قف"
يتم إصدار تحذير.

قف.U
تنتج هذه الوحدة قف البرنامج النصي، الذي يصدر تحذيرًا عند قيمنا ثابت
إسم من فار دولار ليست هي نفس قيمتها السابقة القديمة الموجودة فيها كان $. على
إرجاع، $TD و $tu عقد القيمة المناسبة ل حدد or أونديف المتغير. يرى
أمثلة في Inlibc.U.

مدمج المعالج
كل وحدة سيتم تضمينها ضبط يتم تشغيله من خلال معالج مسبق مدمج. قبل-
يتم تقديم بيانات المعالج بواسطة الحرف "@" ('#' هو تعليق الصدفة
شخصية). إنه يعمل تمامًا كما يعمل المعالج المسبق للغة C ولكنه يسمح بـ Shell و Perl
يهرب. فيما يلي الوظائف المتاحة:

@لو التعبير
If التعبير صحيح، استمر في تحميل الكود حتى @end أو @elsif أو @else.

@elsif التعبير
خيار بديل. لو التعبير هذا صحيح، استمر في تحميل الكود حتى @end،
@elsif أو @else آخر.

@else الرمز الافتراضي الذي سيتم تحميله إذا كان @if التعبير كان كاذبا ولا شيء من
اختياري @elsif متطابق. تحميل حتى @end.

@end أغلق بيان التحميل الشرطي الذي فتحه @if.

@يُعرِّف رمز
يخبر المعالج المسبق بذلك رمز يتم تعريفه من الآن فصاعدا.

الشرط التعبير يمكن أن تتضمن أسماء الرموز (تكون القيمة صحيحة إذا كان الرمز مطلوبًا أو
محددة عبر @يُعرِّف أو يهرب Shell/Perl. يمكن دمج تلك الذرات باستخدام
العوامل المنطقية التقليدية '!' للنفي، و'&&' للمنطقي و، و'||' لمنطقية
أو.

النص الموجود بين قوسين مفردين هو اختبار الصدفة، بينما النص الموجود بين قوسين مزدوجين هو اختبار
اختبار بيرل. وهي التعبيرات:

{ قذيفة نص }
{{ بيرل نص }}

يتم ترجمتها إلى:

if قذيفة نص >/dev/null 2>&1; ثم اخرج 0؛ آخر الخروج 1؛ فاي
إذا كان (بيرل نص) {مخرج 0؛} آخر {مخرج 1؛}

ويتم استخدام حالة الخروج بالطريقة القياسية للحصول على قيمة منطقية، أي 0 صحيح و
كل شيء آخر باطل. لاحظ أنه يمكن التعبير عن الشروط البسيطة فقط في لغة Perl، حتى
يمكن تحميل بعض التعليمات البرمجية المعقدة داخل ميتاكونفيغ وتم إعدامه.

يمكن استخدام المعالج المسبق المدمج لضبط بعض الوحدات بدقة (انظر d_gethname.U ل
مثال معقد) اعتمادًا على الرموز المستخدمة فعليًا بواسطة البرنامج أو الملفات
موجود في التوزيع على سبيل المثال، Oldconfig.U يستخدم اختبار مثل:

@if {اختبار -د ../تلميحات}

و ضبط سيحتوي على تعليمات برمجية تعتمد على التلميح فقط إذا كان هناك تلميحات دليل في
دليل المستوى الأعلى للحزمة. لاحظ أنه يتم تشغيل الاختبارات من داخل ".MT' الدليل،
ومن هنا جاء "../" المطلوب في الاختبار.

يمكن أيضًا استخدام المعالج المسبق لتجنب وضع تعليمات برمجية غير مجدية عندما لا يكون الرمز موجودًا
مُعرف. يمكن حماية الوحدات التي تحدد أكثر من رمز واحد بهذه الطريقة (نظرًا لأن الوحدة
محملة ككل) عن طريق جمع التعليمات البرمجية المعتمدة على الرمز داخل زوج @if/@end. ل
نموذج:

@إذا I_TIME || I_SYS_TIME || I_SYS_TIME_KERNEL
need_time_h='صحيح'
@آخر
need_time_h='خطأ'
@النهاية

سيختبر ما إذا كان الكود المصدري يستخدم أحد الرموز الثلاثة التي تتحكم
ال الوقت or سيس/time.h التضمين وتحديد رمز الصدفة وفقًا لذلك. ذلك يعطي
ضبط ردود الفعل على ما تحتاجه المصادر وتجنب عيب الإصلاح
الوحدات المجمدة.

عبر خطوط '?W:'، يمكنك الحصول على مجموعات مثيرة للاهتمام. على سبيل المثال، i_time.U وحدة
يحتاج إلى معرفة ما إذا كانت مصادر C تستفيد من ملف البنية توقيت يكتب. لذلك،
الخط:

?W::المنطقة الزمنية

يستخدم لآثاره الجانبية المتمثلة في تحديد الرمز توقيت للمعالج المسبق. ال
يمكن لرمز الوحدة بعد ذلك أن يقول:

@إذا كانت المنطقة الزمنية
لـ s_timezone في '-DS_TIMEZONE' ''; يفعل
@آخر
s_timezone =''
@النهاية

... الكود باستخدام s_timezone ...

@إذا كانت المنطقة الزمنية
فعل
@النهاية

ولديك حلقة إضافية تحاول قيمتين متتاليتين لـ s_timezone متغير، ولكن فقط
إذا لزم الأمر.

مهمل رموز
يتم الاحتفاظ بالرموز القديمة لتسهيل عملية الانتقال مع الأقدم ميتاكونفيغ وحدات. إلا إذا
ال -o يتم تمرير التبديل إلى ميتاكونفيغ سيتم تجاهلهم. ومع ذلك، أ مهمل ملف سوف
يتم إنشاؤها لإخبارك بالملفات التي تستخدم تلك الرموز القديمة وماذا
هي الرموز الجديدة التي سيتم استخدامها.

العمر الافتراضي للرموز القديمة هو مراجعة كاملة واحدة، أي ستتم إزالتها عند
يتم إصدار المراجعة الأساسية التالية (لا يتم احتساب ترقيات التصحيح بالطبع). ظزولاؤ
من الحكمة ترجمة مصادرك والبدء في استخدام الرموز الجديدة في أسرع وقت ممكن.

ضبط إشارة
قد يحدث أن يقوم منطق التكوين الداخلي باختيارات خاطئة. ل
على سبيل المثال، على بعض المنصات، ففورك () استدعاء النظام موجود ولكنه معطل، لذا ينبغي أن يكون كذلك
لا يمكن استخدامها. ولا يمكن تضمين تلك المعرفة في الوحدات نفسها، لأن
قد تكون هذه مشكلة مؤقتة وسيقوم البائع بإصلاحها في النهاية، أو شيء من هذا القبيل
تم تقديمه من خلال ترقية نظام التشغيل الجديد.

على أية حال، بالنسبة لجميع تلك المشاكل الصغيرة جدًا الخاصة بالنظام، ميتاكونفيغ
يوفر دعم ملفات التلميح. لاستخدامه، تحتاج إلى إنشاء تلميحات دليل في
دليل المستوى الأعلى للحزمة، واحصل عليه عند التشغيل ميتاكونفيغ. سيؤدي ذلك إلى تحميل
الجزء المتعلق بالتلميح من Oldconfig.U.

من الآن فصاعدًا، يمكنك ضبط بعض متغيرات الصدفة مسبقًا ضبط يستخدم في نظام التشغيل محددة
ملف .sh. يوجد كود في Oldconfig.U يحاول تخمين ملفات التلميح التي يحتاجها
حساب اسم قياسي بناءً على اسم نظام التشغيل واسم النواة والإصدار
الرقم، وما إلى ذلك... وبما أن هذه المعلومات من المحتمل أن تتغير بسرعة، فأنا لا أقوم بتوثيقها
هنا. يجب عليك إجراء هندسة عكسية للكود من Oldconfig.U.

عندما تقوم بإصدار الحزمة الخاصة بك لأول مرة، يجب أن يكون دليل ملف التلميحات فارغًا. إذا
يشتكي مستخدمو الحزمة الخاصة بك من أن لديهم مشكلة ضبط الافتراضيات على أ
نظام معين، عليك أن ترى ما إذا كانت هذه مشكلة خاصة بالنظام الأساسي أم أنها مشكلة
عام واحد. في الحالة الأولى، حان الوقت لتقديم ملف تلميح جديد، بينما في
الأخير، ينبغي تنقيح الوحدة المقابلة.

على سبيل المثال، من المعروف أن أنظمة SGI معطلة ففورك () استدعاء النظام، اعتبارا من هذا
كتابة. واسم ملف التلميح المقابل هو sgi.sh. لذلك كل ما عليك فعله هو الإنشاء
a تلميحات/sgi.sh الملف الذي تكتب فيه:

d_vfork = "تعريف $"

والتي سيتم إعادة رسم خريطة دائما فورك on شوكة (انظر d_vfork.U). عند التشغيل على أنظمة SGI لـ
اول مرة، ضبط سوف يكتشف أن هناك تلميحات/sgi.sh الملف، ونحن على
جهاز IRIX (اسم النواة غالبًا هو /irix)، لذلك سيتم اقتراحه sgi ك
تلميح ممكن. إذا قبله المستخدم، ومنذ $d_vfork يتم تعديل القيمة عن طريق
$setvar اتصل، أ قف! سيتم إرسالها للتحذير من أننا على وشك تجاوز القيمة
محسوبة بواسطة ضبط.

لاحظ أنه ليس عليك تقديم من جميع التلميحات التي يعرفها Oldconfig.U. إذا كان ملف التلميح هو
في عداد المفقودين، لن يتم اقتراحه كخيار ممكن. ركضت الاختبارات الكشفية لحساب
مرشحات التلميحات المحتملة غير مستقرة. إذا كان لديك قيم جديدة أو اختبارات مختلفة، من فضلك
ارسلهم إلي...

تجاوز الخيارات
إذا قمت بإنشاء ملف config.over الملف في دليل المستوى الأعلى، ضبط سوف يسألك إذا كنت
ترغب في تحميله لتجاوز القيم الافتراضية. ويتم ذلك قبل إنشاء
التكوين.sh الملف، لذلك يمنحك فرصة لتصحيح القيم المخزنة هناك.

وهذا يختلف عن أسلوب التلميحات من حيث أنه ملف محلي، وهو المستخدم
حر في الإنشاء لاستخدامه الخاص. لا ينبغي عليك تقديم مثل هذا الملف بنفسك، ولكن السماح لـ
يعرف المستخدم عن هذا الاحتمال.

ضبط مزيد من الخيارات
ضبط قد يتم استدعاء البرنامج النصي مع بعض الخيارات المحددة في سطر الأوامر، إلى
تعديل سلوكه قليلا. فيما يلي الخيارات المسموح بها:

-d استخدم الإعدادات الافتراضية لجميع الإجابات.

-e استمر دون التشكيك في إنتاج الماضي التكوين.sh.

-f ملف استخدم الملف المحدد كتكوين افتراضي. إذا لم يتم استخدام هذا المفتاح،
التكوين مأخوذ من التكوين.sh، عند تواجده.

-h اطبع رسالة المساعدة واخرج.

-r أعد استخدام قيمة رموز C إن أمكن. وهذا سوف تخطي مكلفة nm رمز
اِستِخلاص. إذا تم استخدامه للمرة الأولى (بدون ملف تكوين سابق)،
ضبط سيحاول تجميع وربط برنامج صغير للتعرف عليه
وجود الرمز أو عدمه.

-s الوضع الصامت. سيتم فقط رؤية السلاسل المطبوعة على واصف الملف رقم 4 على الملف
الشاشة (هذه هي الرسائل المهمة). ليس من الممكن إيقاف التشغيل بالكامل
أي إخراج، ولكن يمكنك استخدام "ضبط -درس > / ديف / فارغة 2> & 1"للحصول على كامل
تشغيل دفعة واحدة بدون مخرجات ولا يتطلب تدخل المستخدم.

-D الرمز = القيمة
يحدد مسبقا رمز لتحمل المحدد قيمنا. ومن الممكن أيضًا استخدام "-D
رمز" والتي ستستخدم القيمة الافتراضية لـ "تعريف".

-E توقف عند نهاية أسئلة التكوين، بعد إنتاج ملف
التكوين.sh. هذا لن يؤدي أي 'جعل تعتمد' أو استخراج ملفات .SH.

-K مستخدم مطلع. عند استخدام هذا الخيار، فإنك تعرف ما تفعله و
لذلك فإن التكوين.sh سيتم التعامل مع الملف دائمًا كما لو كان المقصود منه أن يكون
إعادة استخدامها، على الرغم من أنه ربما تم إنشاؤها على نظام أجنبي. إنه أيضًا
يمنع الإجهاض عندما ضبط يكتشف مترجم C غير قابل للاستخدام أو مجموعة خاطئة
من أعلام C. قد يتم تشغيل المزيد من الاختصارات من خلال هذا الخيار أيضًا في
مستقبل. تم توثيق هذا الخيار في ضبط رسالة الاستخدام، لتذكيرنا
حول وجودها، ولكن من المأمول أن يكون الوصف المقدم غامضًا بدرجة كافية.
:-)

-O السماح بالقيم المحددة عبر أ -D or -U لتجاوز الإعدادات من أي تحميلها
ملف الضبط. ليس هذا هو السلوك الافتراضي منذ الإرادة الغالبة
لا يمكن نشرها إلى المتغيرات المشتقة من تلك التي تقوم بتعديلها حاليًا.
بطبيعة الحال، دون -O، يتم الإعداد فقط في حالة عدم وجود ملف تكوين
محملة، وهي آمنة حيث لم يتم حساب المتغيرات المشتقة بعد ...

-S إجراء استبدال متغير على كافة ملفات .SH. يمكنك دمجها مع
-f قم بالتبديل لنشر أي تكوين تريده.

-U رمز=
المجموعات المسبقة رمز لتحمل قيمة فارغة. ومن الممكن أيضًا استخدام "-U رمز'
والتي سوف تحدد رمز إلى "غير محدد".

-V طباعة رقم الإصدار ميتاكونفيغ التي ولدت هذا ضبط سيناريو
والخروج.

الركض البيئة
عند البدء، ضبط يخلق المحلية UU الدليل ويعمل من هناك. الدليل
تتم إزالته عند انتهاء التكوين، ولكن هذا يعني أنه يجب عليك تشغيل البرنامج النصي من مكان حيث
يمكنك الكتابة، أي ليس من نظام ملفات للقراءة فقط.

يمكنك الجري ضبط على الرغم من ذلك عن بعد، كما في:

../حزمة/تكوين

لتكوين المصادر غير الموجودة محليًا. سيتم وضع جميع الملفات التي تم إنشاؤها
الدليل الذي تقوم بتشغيل البرنامج النصي منه. يتم هذا السحر بفضل src.U
الوحدة التي تقوم بوضع src و $rsrc المتغيرات للإشارة إلى مصادر الحزمة. الذي - التي
المسار كامل أو نسبي، اعتمادا على ما إذا كان ضبط تم استدعاؤه عبر كامل أو
مسار نسبي.

من داخل UU الدليل الفرعي، يمكنك استخدامه $rsrc للوصول إلى الملفات المصدر (units
يجب أن تستخدم تلميحات ارتباط الملفات المصدر دائمًا هذه الآلية ولا تفترض
الملف موجود في الدليل الأصلي). يجب أن تستخدم جميع ملفات Makefiles المتغير $src
كمؤشر للمصادر من أعلى دليل البناء (حيث ضبط يجرى)،
إما مباشرة أو عبر إعداد VPATH.

عند الركض ضبط عن بعد، يتم استخراج ملفات .SH في دليل البناء، وليس
في شجرة المصدر. ومع ذلك، فإنه يتطلب نوعا من جعل الدعم لتكون قادرة على تجميع
الأشياء الموجودة في دليل البناء بينما المصادر موجودة في مكان آخر.

باستخدام سحر إعادة التعريفات
من خلال الاستفادة من -M التبديل، قد تتم بعض عمليات إعادة التعيين السحرية داخل ملف confmagic.h
ملف. يجب تضمين هذا الملف بعد ذلك التكوين.ح، بطبيعة الحال، ولكن أيضا بعد كل شيء
الأخرى المطلوبة تشمل الملفات. يسمى:

#تتضمن "config.h"

آخر الادراج

#تشمل "confmagic.h"

عادة، confmagic.h سيحاول إعادة رسم خريطة نسخة () on ميمكبي () إذا لا نسخة () is
متاح محليا، أو تحويل فورك إلى شوكة عند الضرورة، مما يجعلها غير مجدية
تهتم بشأن HAS_VFORK رمز.

تم توثيق سحر التكوين هذا في ملف المسرد.

وحدة النماذج
توجد مجموعة من قوالب الوحدات في ملف ميتاكونفيغ الدليل المصدر، والتي تهدف إلى
يمكن استخدامها بواسطة برنامج (لم يتم كتابته بعد) لإنتاج وحدات جديدة لأنواع مختلفة بسرعة
مواقف. لا توجد وثائق لهذا المشروع غير المكتمل، ولكن أعتقد أنني سوف أذكر ذلك
في صفحة الدليل إذا كنت ترغب في القيام بذلك بنفسك ثم المساهمة به...

مؤلفون


لاري وول[البريد الإلكتروني محمي]> للإصدار 2.0.
هارلان ستين[البريد الإلكتروني محمي]> لملحقات الوحدة الهامة.
رفائيل مانفريدي[البريد الإلكتروني محمي]>.
العديد من المساهمين الآخرين ل ميتاكونفيغ وحدات. راجع ملف الائتمان للحصول على القائمة.

استخدم metaconfig عبر الإنترنت باستخدام خدمات onworks.net


خوادم ومحطات عمل مجانية

قم بتنزيل تطبيقات Windows و Linux

أوامر لينكس

Ad