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

Ad


OnWorks فافيكون

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

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

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

برنامج:

اسم


سلبيات - نظام بناء البرمجيات

الوصف


دليل ومرجع للإصدار 2.2.0

حقوق النشر (c) 1996-2000 Free Software Foundation، Inc.

هذا البرنامج هو برنامج مجاني. يمكنك إعادة توزيعه و / أو تعديله بموجب شروط
رخصة جنو العمومية كما نشرتها مؤسسة البرمجيات الحرة ؛ إما
الإصدار 2 من الترخيص ، أو (حسب اختيارك) أي إصدار لاحق.

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

يجب أن تكون قد تلقيت نسخة من رخصة جنو العمومية مع هذا البرنامج ؛
انظر إلى الملف COPYING. إذا لم يكن كذلك ، فاكتب إلى Free Software Foundation، Inc.، 59 Temple
المكان - جناح 330 ، بوسطن ، ماساتشوستس 02111-1307 ، الولايات المتحدة الأمريكية.

المُقدّمة


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

تستخدم السلبيات عددًا من التقنيات لتحقيق كل هذا. نصوص البناء فقط
نصوص Perl ، مما يجعلها سهلة الفهم ومرنة للغاية. النطاق العالمي لـ
يتم استبدال المتغيرات بآلية استيراد / تصدير لمشاركة المعلومات بين
البرامج النصية ، مما يحسن بشكل كبير من قابلية القراءة وقابلية الصيانة لكل نص برمجي.
التصميم البيئات يتم تقديمها: هذه هي كائنات Perl التي تلتقط امتداد
المعلومات المطلوبة للتحكم في عملية البناء. يتم استخدام بيئات متعددة
عندما تكون هناك حاجة إلى دلالات مختلفة لتوليد المنتجات في شجرة البناء. سلبيات
ينفذ تحليل التبعية التلقائي ويستخدم هذا لتسلسل كامل عالميًا
يبني. يتم إنتاج التصميمات المتغيرة بسهولة من شجرة مصدر واحدة. بناء ذكي
التقسيم ممكن ، عند العمل على التغييرات المحلية. يمكن إعداد التجاوزات على
تجاوز تعليمات الإنشاء بسهولة دون تعديل أي نصوص برمجية. تشفير MD5
التوقيعات ترتبط بالملفات المشتقة ، وتستخدم لتحديد ما إذا كان
يحتاج ملف معين إلى إعادة بنائه.

أثناء تقديم كل ما سبق وأكثر ، تظل السلبيات بسيطة وسهلة الاستخدام. هذا سوف،
نأمل أن تكون واضحًا أثناء قراءة بقية هذا المستند.

لماذا سلبيات؟ لماذا ليس يصنع؟


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

البناء تعقيد

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

البناء قابلية اعادة الأنتاج

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

متنوع يبني

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

مستودعات

تقدم Make دعمًا محدودًا فقط لإنشاء البرامج من التعليمات البرمجية الموجودة في ملف
هيكل دليل المستودع المركزي. ميزة VPATH لـ GNU make (وبعض ملفات
إجراء عمليات التنفيذ) لتوفير هذا ، ولكنه لا يعمل كما هو متوقع: إنه
يغير مسار الملف الهدف إلى اسم VPATH مبكرًا جدًا في تحليله ، وبالتالي
يبحث عن جميع التبعيات في دليل VPATH. لضمان التطوير الصحيح
يبني ، من المهم أن تكون قادرًا على إنشاء ملف في دليل بناء محلي وأن يكون
أي ملفات في مستودع الكود (دليل VPATH ، في شروط الصنع) تعتمد على الملف المحلي
إعادة بناء الملف بشكل صحيح. هذا غير ممكن مع VPATH ، بدون ترميز الكثير من
معرفة المستودع المعقدة مباشرة في ملفات makefiles.

حفظ it بسيط


تم ذكر عدد قليل من الصعوبات المتعلقة بالتصميم أعلاه. في هذا وما يليه
الأقسام ، سنقدم سلبيات ونبين كيفية معالجة هذه القضايا.

بيرل مخطوطات

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

مرحبا، العالمية!

لتأسيس المناقشة التالية ، إليك كيفية إنشاء ملف مرحبا، العالمية! C
التطبيق مع السلبيات:

$ env = سلبيات جديدة () ؛
برنامج $ env 'hello'، 'hello.c'؛

إذا قمت بتثبيت هذا البرنامج النصي في دليل ، قم بتسمية البرنامج النصي بناء، وأنشئ ملف
مرحبًا ج في نفس الدليل ، يمكنك كتابة "cons hello" لإنشاء ملف
التطبيق:

٪ سلبيات مرحبًا
سم مكعب -ج hello.c -o hello.o
cc -o مرحبا hello.o

التصميم البيئات

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

$ env = سلبيات جديدة (
CC => "مجلس التعاون الخليجي" ،
LIBS => "libworld.a"
);

برنامج $ env 'hello'، 'hello.c'؛

في هذه الحالة ، بدلاً من استخدام بيئة البناء الافتراضية ، كما هي ، لدينا
تم تجاوز قيمة "CC" بحيث يتم استخدام مكافئ مترجم GNU C بدلاً من ذلك. منذ
هذا الإصدار من مرحبا، العالمية! يتطلب مكتبة ، libworld.a، لقد حددنا أن أي
البرنامج المرتبط في هذه البيئة يجب أن يتم ربطه بتلك المكتبة. إذا كانت المكتبة
موجود بالفعل ، جيد وجيد ، ولكن إذا لم يكن كذلك ، فسيتعين علينا أيضًا تضمين العبارة:

Library $ env 'libworld'، 'world.c'؛

الآن إذا كتبت "cons hello" ، فسيتم إنشاء المكتبة قبل ربط البرنامج ، و
بالطبع ، سيتم استخدام "دول مجلس التعاون الخليجي" لتجميع كلا الوحدتين:

٪ سلبيات مرحبًا
دول مجلس التعاون الخليجي -c hello.c -o hello.o
دول مجلس التعاون الخليجي -c world.c -o world.o
ar libworld.aworld.o
ع: إنشاء libworld.a
رانليب libworld.a
دول مجلس التعاون الخليجي -o hello.o libworld.a

أوتوماتيك و إكمال التبعية تحليل

مع السلبيات ، يتم التعامل مع التبعيات تلقائيًا. استمرار المثال السابق ، لاحظ
أنه عندما نقوم بالتعديل العالم ج, العالم يتم إعادة تجميعها ، libworld.a تم إعادة إنشائه و مرحبا
إعادة ربط:

٪ vi العالم ج
[تحرير]
٪ سلبيات مرحبًا
دول مجلس التعاون الخليجي -c world.c -o world.o
ar libworld.aworld.o
ع: إنشاء libworld.a
رانليب libworld.a
دول مجلس التعاون الخليجي -o hello.o libworld.a

هذا مثال بسيط نسبيًا: السلبيات `` يعرف " العالم يعتمد على العالم ج، لان
يتم إعداد التبعية صراحةً بواسطة طريقة "المكتبة". وهي تعرف ذلك أيضًا libworld.a
يعتمد على العالم وذلك مرحبا يعتمد على libworld.a، كل ذلك لأسباب مماثلة.

الآن اتضح أن مرحبًا ج يتضمن أيضًا ملف تعريف الواجهة ، العالم:

٪ emacs world.h
[تحرير]
٪ سلبيات مرحبًا
دول مجلس التعاون الخليجي -c hello.c -o hello.o
دول مجلس التعاون الخليجي -o hello.o libworld.a

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

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

أوتوماتيك شامل نساعدك في بناء التسلسل

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

ابني كبير الأشجار - لا تزال م as بسيط


A تسلسل of نساعدك في بناء مخطوطات

يتم تنظيم البنية الأكبر ، في Cons ، من خلال إنشاء تسلسل هرمي لـ نساعدك في بناء مخطوطات. في القمة
من الشجرة هو نص يسمى بناء. باقي النصوص ، حسب الاصطلاح ، هي كل منها
تسمى مجند. هذه البرامج النصية مرتبطة ببعضها البعض ، بكل بساطة ، من خلال "Build" ،
الأوامر "تصدير" و "استيراد".

البناء أمر

يأخذ الأمر "Build" قائمة بملفات مجند أسماء الملفات ، وترتيبها لتكون
المدرجة في البناء. على سبيل المثال:

بناء qw (
السائقين / العرض / المجند
السائقين / الفأر / المجند
محلل / مجند
المرافق / المجند
);

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

يمكن كتابة هذا أيضًا كنص متعدد المستويات. على سبيل المثال ، ملف بناء ربما ملف
تحتوي على هذا الأمر:

بناء qw (
محلل / مجند
السائقين / المجندين
المرافق / المجند
);

و مجند ملف في السائقين قد يحتوي الدليل على هذا:

بناء qw (
عرض / مجند
الفأر / المجند
);

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

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

Conscript_chdir 1 ؛

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

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

Conscript_chdir 0 ؛

نسبي، أعلى نسبي و مطلق ملف أسماء

ربما لاحظت أن أسماء الملفات المحددة للأمر Build مرتبطة بـ
موقع النص الذي تم استدعاءه منه. هذا صحيح بشكل عام لاسم ملف آخر
الحجج لأوامر أخرى أيضًا ، على الرغم من أننا قد نذكر هنا أيضًا أنك إذا بدأت
اسم ملف بعلامة التجزئة `` # '' ، ثم يتم تفسير هذا الملف بالنسبة إلى الجزء العلوي-
دليل المستوى (حيث يكون ملف بناء يوجد ملف). وليس من المستغرب أن تبدأ ذلك
مع `` / '' ، فإنه يعتبر اسم مسار مطلق. هذا صحيح حتى على الأنظمة
التي تستخدم الشرطة المائلة للخلف بدلاً من الشرطة المائلة للأمام لتسمية المسارات المطلقة.

باستخدام نماذج in نساعدك في بناء مخطوطات

يمكنك سحب وحدات في كل منها مجند ملف باستخدام لغة Perl العادية "استخدام" أو "تتطلب"
صياغات:

استخدم الإنجليزية؛
تتطلب بلدي :: الوحدة النمطية ؛

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

مجال of المتغيرات

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

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

تصدير أمر

يتم استخدام أمر "التصدير" كما في المثال التالي:

$ env = سلبيات جديدة () ؛
$ INCLUDE = "# تصدير / تضمين" ؛
LIB دولار = "# تصدير / ليب" ؛
تصدير qw (env INCLUDE LIB) ؛
بناء qw (استخدام / مجند) ؛

سيتم حذف قيم المتغيرات البسيطة المذكورة في قائمة "التصدير"
بأي أوامر "بناء" لاحقة. سيقوم أمر "التصدير" بتصدير Perl فقط العددية
المتغيرات ، أي المتغيرات التي يبدأ اسمها بـ "$". المتغيرات والكائنات الأخرى ، إلخ.
يمكن تصديرها عن طريق المرجع - لكن جميع البرامج النصية ستشير إلى نفس الكائن ، وهذا
يجب اعتبار الكائن للقراءة فقط من خلال النصوص الفرعية والأصل
تصدير البرنامج النصي. ومع ذلك ، من المقبول تعيين قيمة جديدة إلى العدد القياسي المُصدَّر
متغير - لن يغير المتغير الأساسي المشار إليه. هذا التسلسل
مثال على ما يرام:

$ env = سلبيات جديدة () ؛
تصدير qw (env INCLUDE LIB) ؛
بناء qw (استخدام / مجند) ؛
$ env = سلبيات جديدة (CFLAGS => "-O") ؛
بناء qw (أخرى / مجند) ؛

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

استيراد أمر

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

استيراد qw (env INCLUDE) ؛

يعد هذا قانونيًا فقط إذا قام البرنامج النصي الأصلي بتصدير كلا من $ env و $ INCLUDE. كما يجب
أعطيت كل من هذه المتغيرات القيم. لا بأس من البرنامج النصي الفرعي فقط
استيراد مجموعة فرعية من المتغيرات التي تم تصديرها (في هذا المثال ، "$ LIB" ، والتي تم تصديرها بواسطة
المثال السابق ، لا يتم استيراده).

يتم إعادة تصدير جميع المتغيرات المستوردة تلقائيًا ، وبالتالي فإن التسلسل:

استيراد qw (env INCLUDE) ؛
بناء qw (تحتي / مجند) ؛

سيوفر كلا من "env" $ و "INCLUDE $" للملف الفرعي. إذا كان يجب أن تكون "env $" فقط
عند تصديرها ، يكفي ما يلي:

استيراد qw (env INCLUDE) ؛
تصدير qw (env) ؛
بناء qw (تحتي / مجند) ؛

وغني عن القول ، يمكن تعديل المتغيرات محليًا قبل استدعاء "Build" على
نص فرعي.

البناء سيناريو تقييم طلب

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

بناء qw (
السائقين / العرض / المجند
السائقين / الفأر / المجند
محلل / مجند
المرافق / المجند
);

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

A الموديل For مشاركة ملفات


بعض بسيط الاتفاقيات

في أي نظام برمجي معقد ، يجب أن تكون هناك طريقة لمشاركة منتجات البناء
مقرر. نقترح مجموعة بسيطة من الاتفاقيات التي تعتبر تافهة للتنفيذ معها
سلبيات ، لكنها فعالة جدا.

القاعدة الأساسية هي المطالبة ببناء جميع المنتجات التي يجب مشاركتها فيما بينها
يتم مشاركة الدلائل عبر دليل وسيط. عادة ما نسمي هذا
تصدير، وفي بيئة C ، قدم أدلة فرعية تقليدية لهذا الدليل ،
مثل تتضمن, ليب, بن، الخ.

يتم تعريف هذه الدلائل من قبل المستوى الأعلى بناء ملف. بسيط بناء ملف ل
a مرحبا، العالمية! قد يبدو التطبيق ، الذي تم تنظيمه باستخدام أدلة متعددة ، كما يلي:

# إنشاء ملف من أجل Hello، World!

# أين نضع جميع منتجاتنا المشتركة.
تصدير دولار = '#export' ؛

تصدير qw (CONS INCLUDE LIB BIN) ؛

# الدلائل القياسية لمشاركة المنتجات.
$ INCLUDE = "$ EXPORT / include"؛
$ LIB = "$ EXPORT / lib" ؛
$ BIN = "$ EXPORT / bin" ؛

# بيئة بناء قياسية.
CONS دولار = سلبيات جديدة (
CPPPATH => $ INCLUDE، # تضمين مسار لتجميعات C.
LIBPATH => $ LIB، # مسار مكتبة لربط البرامج
LIBS => '-lworld'، # قائمة المكتبات القياسية
);

بناء qw (
مرحبًا / مجند
العالم / المجند
);

العالم الدليل مجند الملف يبدو كالتالي:

# ملف مجند لعالم الدليل
استيراد qw (CONS INCLUDE LIB) ؛

# تثبيت منتجات هذا الدليل
قم بتثبيت $ CONS $ LIB، 'libworld.a'؛
قم بتثبيت $ CONS $ INCLUDE، 'world.h'؛

# المنتجات الداخلية
المكتبة $ CONS 'libworld.a'، 'world.c'؛

و مرحبا الدليل مجند الملف يبدو كالتالي:

# ملف مجند للدليل مرحبا
استيراد qw (CONS BIN) ؛

# المنتجات المصدرة
تثبيت $ CONS $ BIN ، "مرحبًا" ؛

# المنتجات الداخلية
برنامج $ CONS 'hello'، 'hello.c'؛

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

٪ تصدير سلبيات
تثبيت world / world.h كتصدير / تضمين / world.h
cc -Iexport / include -c hello / hello.c -o hello / hello.o
cc -Iexport / include -c world / world.c -o world / world.o
ar r world / libworld.a world / world.o
ع: خلق العالم / libworld.a
رانليب العالم / libworld.a
قم بتثبيت world / libworld.a كـ export / lib / libworld.a
cc -o hello / hello hello.o -Lexport / lib -lworld
قم بتثبيت hello / hello كـ export / bin / hello

نظيف ، مفهوم موقع مستقل مخطوطات

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

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

فصل مصدر و نساعدك في بناء الأشجار


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

فصل نساعدك في بناء و مصدر الدلائل استخدام ال لينك أمر

توفر العيوب آلية بسيطة تتعامل مع كل هذه المتطلبات. الرابط
يتم استدعاء الأمر كما في هذا المثال:

رابط 'build' => 'src'؛

الدلائل المحددة `` مرتبطة '' بدليل المصدر المحدد. دعونا نفترض
أنك قمت بإعداد دليل مصدر ، SRC، مع الدلائل الفرعية العالم و مرحبا تحتها ،
كما في المثال السابق. يمكنك بعد ذلك استبدال خطوط الإنشاء الأصلية بملف
التالية:

بناء qw (
بناء / عالم / مجند
بناء / مرحبا / مجند
);

لاحظ أنك تعامل مع مجند الملف كما لو كان موجودًا في دليل البناء. الآن إذا
قمت بكتابة نفس الأمر كما كان من قبل ، ستحصل على النتائج التالية:

٪ تصدير سلبيات
قم بتثبيت build / world / world.h مثل export / include / world.h
cc -Iexport / include -c build / hello / hello.c -o build / hello / hello.o
cc -Iexport / include -c build / world / world.c -o build / world / world.o
ar r build / world / libworld.a build / world / world.o
ع: إنشاء بناء / عالم / libworld.a
رانليب بناء / العالم / libworld.a
قم بتثبيت build / world / libworld.a كـ export / lib / libworld.a
CC -o build / hello / hello build / hello / hello.o -Lexport / lib -lworld
قم بتثبيت build / hello / hello كـ export / bin / hello

مرة أخرى ، اهتمت سلبيات بالتفاصيل نيابة عنك. على وجه الخصوص ، ستلاحظ أن كل شيء
تتم الإنشاءات باستخدام ملفات المصدر وملفات الكائنات من دليل الإنشاء. ل
مثال، بناء / العالم / world.o تم تجميعه من بناء / العالم / world.cو
تصدير / تضمين / world.h تم تثبيته من بناء / عالم / world.h. يتم تحقيق هذا في معظم الأحيان
أنظمة من خلال الوسيلة البسيطة لربط الملفات المطلوبة من كل مصدر
الدليل إلى دليل البناء المناسب.

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

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

متنوع يبني


مرحبا، العالمية! For موز و خَوخ وOS

تتطلب الإصدارات المتغيرة امتدادًا بسيطًا آخر فقط. لنأخذ كمثال أ
متطلب للسماح للبنيات لكل من أنظمة التشغيل baNaNa و peAcH. في هذه الحالة،
نحن نستخدم نظام ملفات موزع ، مثل NFS للوصول إلى نظام معين ، و
يجب تجميع واحد فقط أو آخر من الأنظمة لأي استدعاء معين لـ
"سلبيات". إليك إحدى الطرق التي يمكننا من خلالها إعداد ملف بناء ملف مرحبا، العالمية!
التطبيق:

# إنشاء ملف من أجل Hello، World!

die qq (يجب تحديد نظام التشغيل) ما لم يكن $ OS = $ ARG {OS} ؛
die qq (يجب أن يكون نظام التشغيل "peach" أو "banana")
if $ OS ne "peach" && $ OS ne "banana"؛

# أين نضع جميع منتجاتنا المشتركة.
EXPORT = "# export / $ OS"؛

تصدير qw (CONS INCLUDE LIB BIN) ؛

# الدلائل القياسية لمشاركة المنتجات.
$ INCLUDE = "$ EXPORT / include"؛
$ LIB = "$ EXPORT / lib" ؛
$ BIN = "$ EXPORT / bin" ؛

# بيئة بناء قياسية.
CONS دولار = سلبيات جديدة (
CPPPATH => $ INCLUDE، # تضمين مسار لتجميعات C.
LIBPATH => $ LIB، # مسار مكتبة لربط البرامج
LIBS => '-lworld'، # قائمة المكتبات القياسية
);

# $ BUILD هو المكان الذي سنشتق منه كل شيء.
$ BUILD = "# build / $ OS" ؛

# أخبر السلبيات حيث توجد ملفات المصدر لـ $ BUILD.
ربط $ BUILD => 'src'؛

يبني (
"$ BUILD / hello / Conscript" ،
"$ BUILD / العالم / المجند" ،
);

الآن إذا قمنا بتسجيل الدخول إلى نظام peAcH ، فيمكننا بناء مرحبا، العالمية! تطبيق لذلك
برنامج:

٪ سلبيات تصدير نظام التشغيل = الخوخ
قم بتثبيت build / peach / world / world.h as export / peach / include / world.h
cc -Iexport / peach / include -c build / peach / hello / hello.c -o build / peach / hello / hello.o
cc -Iexport / peach / include -c build / peach / world / world.c -o build / peach / world / world.o
ar r build / peach / world / libworld.a build / peach / world / world.o
ع: إنشاء بناء / خوخ / عالم / libworld.a
رانليب بناء / الخوخ / العالم / libworld.a
قم بتثبيت build / peach / world / libworld.a مثل export / peach / lib / libworld.a
cc -o build / peach / hello / hello build / peach / hello / hello.o-lexport / خوخ / lib -lworld
قم بتثبيت build / peach / hello / hello مثل export / peach / bin / hello

المتغيرات on a موضوع

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

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

التوقيعات


MD5 التشفير التوقيعات

عندما ينشئ Cons ملفًا مشتقًا ، فإنه يخزن ملف توقيع لهذا الملف. التوقيع
يتم تخزينه في ملف منفصل ، واحد لكل دليل. بعد تجميع المثال السابق ،
ال .ودع ملف في بناء / خوخ / عالم الدليل يشبه هذا:

world.o:834179303 23844c0b102ecdc0b4548d1cd1cbd8c6
libworld.a:834179304 9bf6587fa06ec49d864811a105222c00

الرقم الأول هو طابع زمني - لأنظمة UNIX ، يكون هذا عادةً رقم
ثواني منذ الأول من يناير 1. القيمة الثانية هي مجموع اختباري MD1970. ال الرسالة استوعب
خوارزمية هي خوارزمية تحسب تشفيرًا قويًا ، نظرًا لسلسلة إدخال
التوقيع على تلك السلسلة. المجموع الاختباري MD5 المخزن في ملف .ودع الملف ، في الواقع ، هو ملف
ملخص لجميع معلومات التبعية للملف المحدد. لذلك ، على سبيل المثال ، بالنسبة لـ
العالم هذا يتضمن ما لا يقل عن ملف العالم ج ملف ، وأيضًا أي ملفات رأس تحتوي على سلبيات
يعرف عن ذلك تم تضمينه ، بشكل مباشر أو غير مباشر بواسطة العالم ج. ليس هذا فقط ، ولكن
سطر الأوامر الفعلي الذي تم استخدامه لتوليد العالم يتم تغذيتها أيضًا في حساب
التوقيع. بصورة مماثلة، libworld.a يحصل على توقيع `` يشمل '' جميع ملفات
توقيعات مكوناته (وبالتالي ، مؤقتًا ، توقيعات من مشاركة
المكونة) ، بالإضافة إلى سطر الأوامر الذي أنشأ الملف.

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

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

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

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

يعد استخدام هذه التوقيعات طريقة بسيطة وفعالة وفعالة للغاية
تحسين - بشكل كبير - استنساخ النظام.

سنوضح هذا بمثال بسيط:

# بسيط "Hello، World!" إنشاء ملف
$ CFLAGS = '-g' إذا $ ARG {DEBUG} eq 'on'؛
السلبيات $ = سلبيات جديدة (CFLAGS => $ CFLAGS) ؛
برنامج $ CONS 'hello'، 'hello.c'؛

لاحظ كيف تقوم Cons بإعادة التحويل البرمجي في الأوقات المناسبة:

٪ سلبيات مرحبًا
سم مكعب -ج hello.c -o hello.o
cc -o مرحبا hello.o
٪ سلبيات مرحبًا
السلبيات: كلمة "hello" محدثة.
٪ cons DEBUG = مرحبًا
CC -g -c hello.c -o hello.o
cc -o مرحبا hello.o
٪ cons DEBUG = مرحبًا
السلبيات: كلمة "hello" محدثة.
٪ سلبيات مرحبًا
سم مكعب -ج hello.c -o hello.o
cc -o مرحبا hello.o

رمز مستودعات


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

مستودع

توفر السلبيات آلية لتحديد قائمة من مستودعات الكود التي سيتم البحث فيها ،
بالترتيب ، للملفات المصدر والملفات المشتقة غير الموجودة في شجرة دليل البناء المحلي.

الأسطر التالية في أ بناء ملف سيوجه سلبيات للنظر أولا تحت
/ البيرة / التجربة / المستودع الدليل ثم تحت ملف / usr / product / repository دليل:

مستودع qw (
/ البيرة / التجربة / المستودع
/ usr / product / repository
);

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

تحتفظ Cons بقائمة عالمية واحدة من دلائل المستودعات. سوف تقضي السلبيات على
الدليل الحالي ، وأي أدلة غير موجودة ، من القائمة.

العثور على ال بناء ملف in a مستودع

سيبحث أيضا عن سلبيات بناء و مجند الملفات في شجرة المستودع أو الأشجار.
هذا يؤدي إلى وضع الدجاجة والبيضة ، على الرغم من ذلك: كيف تنظر في شجرة المستودع
ل بناء الملف إذا كان بناء يخبرك الملف أين يوجد المستودع؟ تحصل
حول هذا ، يمكن تحديد المستودعات عبر خيارات "-R" في سطر الأوامر:

٪ cons -R / usr / experience / repository -R / usr / product / repository.

أي أدلة مستودع محددة في بناء or مجند سيتم إلحاق الملفات
إلى أدلة المستودع المحددة بواسطة خيارات سطر الأوامر "-R".

مستودع مصدر ملفات

إذا كان كود المصدر (بما في ذلك مجند file) لإصدار المكتبة من ملف مرحبا،
العالمية! تطبيق C موجود في مستودع (بدون ملفات مشتقة) ، ستستخدم Cons
ملفات مصدر المستودع لإنشاء ملفات الكائن المحلية والملف القابل للتنفيذ:

٪ cons -R / usr / src_only / repository مرحبًا
مجلس التعاون الخليجي -c /usr/src_only/repository/hello.c -o hello.o
مجلس التعاون الخليجي -c /usr/src_only/repository/world.c -o world.o
ar libworld.aworld.o
ع: إنشاء libworld.a
رانليب libworld.a
دول مجلس التعاون الخليجي -o hello.o libworld.a

سيؤدي إنشاء ملف مصدر محلي إلى قيام Cons بإعادة إنشاء الملف المشتق المناسب أو
الملفات:

٪ pico world.c
[تحرير]
٪ cons -R / usr / src_only / repository مرحبًا
دول مجلس التعاون الخليجي -c world.c -o world.o
ar libworld.aworld.o
ع: إنشاء libworld.a
رانليب libworld.a
دول مجلس التعاون الخليجي -o hello.o libworld.a

وستؤدي إزالة ملف المصدر المحلي إلى عودة العيوب إلى بناء الملف المشتق
ملفات من مصدر المستودع:

٪ rm world.c
٪ cons -R / usr / src_only / repository مرحبًا
مجلس التعاون الخليجي -c /usr/src_only/repository/world.c -o world.o
ar libworld.aworld.o
ع: إنشاء libworld.a
رانليب libworld.a
دول مجلس التعاون الخليجي -o hello.o libworld.a

مستودع مستمد ملفات

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

يمكن تحقيق ذلك عادةً عن طريق إنشاء البرنامج في المستودع (أو ،
بدلاً من ذلك ، في دليل البناء ، ثم نسخ النتيجة إلى المستودع):

٪ cd / usr / all / repository
٪ سلبيات مرحبًا
دول مجلس التعاون الخليجي -c hello.c -o hello.o
دول مجلس التعاون الخليجي -c world.c -o world.o
ar libworld.aworld.o
ع: إنشاء libworld.a
رانليب libworld.a
دول مجلس التعاون الخليجي -o hello.o libworld.a

(هذا آمن حتى لو كان ملف بناء يسرد الملف ملفات / usr / all / repository الدليل في ملف
أمر "مستودع" لأن Cons سيزيل الدليل الحالي من المستودع
قائمة.)

الآن إذا أردنا بناء نسخة من التطبيق مع منطقتنا مرحبًا ج ملف ، نحن بحاجة فقط
لإنشاء ملف المصدر الضروري ، واستخدم الخيار "-R" لجعل Cons استخدام الآخر
الملفات من المستودع:

٪ mkdir $ HOME / build1
٪ cd $ HOME / build1
٪ ed hello.c
[تحرير]
٪ cons -R / usr / all / repository مرحبًا
دول مجلس التعاون الخليجي -c hello.c -o hello.o
مجلس التعاون الخليجي -o hello.o /usr/all/repository/libworld.a

لاحظ أن Cons لم يكلف نفسه عناء إعادة إنشاء محلي libworld.a مكتبة (أو إعادة ترجمة ملف
العالم الوحدة النمطية) ، ولكنه يستخدم بدلاً من ذلك الإصدار المترجم بالفعل من المستودع.

لأن توقيعات MD5 التي تضعها Cons في ملف .ودع يحتوي الملف على طوابع زمنية لملف
الملفات المشتقة ، يجب أن تتطابق الطوابع الزمنية للتوقيع مع الطوابع الزمنية للملف للتوقيع
تعتبر صالحة.

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

المستودع_Sig_Times_OK 0 ؛

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

محلّي نسخ of ملفات

إذا كانت شجرة المستودع تحتوي على النتائج الكاملة للبناء ، فإننا نحاول البناء منها
المستودع بدون أي ملفات في شجرتنا المحلية ، وهو أمر يثير الدهشة إلى حد ما
يحدث:

٪ mkdir $ HOME / build2
٪ cd $ HOME / build2
٪ cons -R / usr / all / repository مرحبًا
السلبيات: كلمة "hello" محدثة.

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

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

qw المحلية (
مرحبا
);

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

٪ cons -R / usr / all / repository مرحبًا
نسخة محلية من hello من / usr / all / repository / hello
السلبيات: كلمة "hello" محدثة.

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

يعد إنشاء نسخ محلية مفيدًا للغاية بالنسبة للملفات التي يتم تثبيتها في ملف
دليل وسيط (للمشاركة مع أدلة أخرى) عبر أمر "التثبيت".
يرافق الأمر "تثبيت" لملف مع الأمر "محلي" المصاحب لذلك
من الشائع أن توفر Cons الأمر أمر `` Install_Local '' كطريقة ملائمة للقيام بالأمرين:

Install_Local $ env، '#export'، 'hello'؛

يعادل بالضبط:

تثبيت $ env '#export'، 'hello'؛
محلي '# export / hello'؛

يقوم كل من الأمرين "Local" و "Install_Local" بتحديث الملف المحلي .ودع ملف مع
توقيعات الملفات المناسبة ، بحيث يتم تنفيذ عمليات الإنشاء المستقبلية بشكل صحيح.

مستودع التبعية تحليل

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

٪ cons -R / usr / all / repository مرحبًا
مجلس التعاون الخليجي -c /usr/all/repository/hello.c -o hello.o
/usr/all/repository/hello.c:1: hello.h: لا يوجد مثل هذا الملف أو الدليل

يفرض حل هذه المشكلة بعض المتطلبات على طريقة بيئات البناء
محددة وعلى طريقة استخدام توجيه C #include للمعالج المسبق لتضمين الملفات.

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

$ env = سلبيات جديدة (
CC => "مجلس التعاون الخليجي" ،
CPPPATH => '.'،
LIBS => "libworld.a" ،
);

نظرًا لتعريف متغير "CPPPATH" ، ينتج عن ذلك ، عندما نعيد تنفيذ
أمر:

٪ cons -R / usr / all / repository مرحبًا
دول مجلس التعاون الخليجي -c -I. -I / usr / all / repository /usr/all/repository/hello.c -o hello.o
مجلس التعاون الخليجي -o hello.o /usr/all/repository/libworld.a

ترتيب الأعلام "-I" مكرر ، للمعالج C المسبق ، نفس المستودع-
مسار بحث الدليل الذي تستخدمه Cons لتحليل التبعية الخاص بها. اذا كان هناك
مستودعات متعددة وأدلة متعددة لـ "CPPPATH" ، ستلحق Cons المستودع
الدلائل إلى بداية كل دليل "CPPPATH" ، وضرب الرقم بسرعة
من أعلام "-I". كمثال متطرف ، أ بناء ملف يحتوي على:

مستودع qw (
/ u1
/ u2
);

$ env = سلبيات جديدة (
CPPPATH => "أ: ب: ج" ،
);

قد ينتج عنه أمر تجميع لـ:

cc -Ia -I / u1 / a -I / u2 / a -Ib -I / u1 / b -I / u2 / b -Ic -I / u1 / c -I / u2 / c -c hello.c -o مرحبا

لأن Cons تعتمد على أعلام المترجم "-I" لتوصيل الترتيب الذي
يجب البحث في دلائل المستودع ، التعامل السلبي مع دلائل المستودع هو
غير متوافق بشكل أساسي مع استخدام علامات الاقتباس المزدوجة في التوجيهات "#include" في سي
مصدر الرمز:

# تضمين "file.h" / * لا تستخدم الاقتباسات المزدوجة مثل هذا * /

هذا لأن معظم معالجات لغة سي الأولية ، عندما تواجه مثل هذا التوجيه ، ستكون دائمًا أولًا
ابحث في الدليل الذي يحتوي على الملف المصدر. هذا يقوض وضع "-I"
الخيارات التي تبنيها Cons لجعل المعالج المسبق متوافقًا مع البحث المفضل لديه
مسار.

وبالتالي ، عند استخدام أشجار المستودعات في سلبيات ، دائما استخدام الأقواس الزاوية للضمين
الملفات:

#يشمل / * استخدم دعامات الزوايا بدلاً من ذلك * /

Repository_List

يوفر Cons أمر "Repository_List" لإرجاع قائمة بجميع أدلة المستودع
بترتيب البحث الحالي. يمكن استخدام هذا لتصحيح الأخطاء ، أو لعمل لغة Perl أكثر تعقيدًا
أمور:

list = Repository_List ؛
طباعة ارتباط (''،list)، "\ n"؛

مستودع تفاعل مع آخر سلبيات ملامح

يتفاعل التعامل السلبي مع أشجار المستودعات بشكل صحيح مع ميزات سلبيات أخرى - وهي
لقول ، إنه يفعل ما تتوقعه بشكل عام.

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

الترتيب الأهداف


حتى الآن ، أظهرنا استدعاء السلبيات مع هدف واضح للبناء:

٪ سلبيات مرحبًا

عادة ، لا تبني Cons أي شيء ما لم يتم تحديد هدف ، ولكن مع تحديد "."
(الدليل الحالي) سيبني كل شيء:

٪ cons # لا يبني أي شيء

٪ سلبيات . # يبني كل شيء تحت دليل المستوى الأعلى

إضافة الأسلوب "الافتراضي" إلى أي طريقة بناء or مجند سيضيف الملف المحدد
يستهدف قائمة الأهداف الافتراضية. سوف تبني العيوب هذه الافتراضات إذا لم يكن هناك
الأهداف المحددة في سطر الأوامر. لذا أضف السطر التالي إلى المستوى الأعلى
بناء سيحاكي file السلوك المعتاد لـ Make لبناء كل شيء افتراضيًا:

تقصير '.'؛

ما يلي من شأنه أن يضيف مرحبا و مع السلامة الأوامر (في نفس الدليل مثل ملف
بناء or مجند file) إلى القائمة الافتراضية:

qw الافتراضي (
مرحبا
مع السلامة
);

يمكن استخدام الطريقة "الافتراضية" أكثر من مرة لإضافة أهداف إلى القائمة الافتراضية.

انتقائي يبني


توفر العيوب طريقتين لتقليل حجم البنية المحددة. الأول عن طريق التحديد
الأهداف في سطر الأوامر ، والثاني هو طريقة لتقليم شجرة البناء. حسنًا
النظر في مواصفات الهدف أولا.

انتقائي استهداف

مثل make ، تسمح Cons بتحديد `` الأهداف '' في سطر الأوامر. أهداف سلبيات
قد تكون إما ملفات أو أدلة. عندما يتم تحديد دليل ، يكون هذا مجرد اختصار-
تدوين يدوي لكل منتج مشتق - تعرفه سلبيات - في المحدد
الدليل وأدناه. على سبيل المثال:

٪ سلبيات بناء / hello / hello.o

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

في هذا المثال:

٪ سلبيات بناء

كل شيء في نساعدك في بناء الدليل مبني ، إذا لزم الأمر. مرة أخرى ، قد يتسبب هذا في المزيد من الملفات
ليتم بناؤها. على وجه الخصوص ، على حد سواء تصدير / تضمين / world.h و تصدير / ليب / libworld.a .
المطلوبة من قبل بناء / مرحبا الدليل ، وبالتالي سيتم بناؤها إذا كانت قديمة.

إذا فعلنا ذلك ، فبدلاً من ذلك:

٪ تصدير سلبيات

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

لا '' خاص`` الأهداف

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

٪ اختبارات سلبية

سيبني جميع الاختبارات.

٪ تصدير سلبيات

سيبني الإصدار الإنتاجي للنظام (لكن ليس الاختبارات) ، و:

٪ سلبيات بناء

ربما ينبغي تجنبه (لأنه سيجمع الاختبارات دون داع).

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

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

٪ سلبيات .

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

البناء تشذيب


بالتزامن مع اختيار الهدف ، نساعدك في بناء تشذيب يمكن استخدامها لتقليل نطاق
يبني. في المثال السابق لكل من peAcH و baNaNa ، رأينا بالفعل كيف يعتمد على النص
يمكن استخدام تقليم البناء لإتاحة نصف البنية المحتملة فقط لأي شيء
التذرع بـ "سلبيات". توفر السلبيات أيضًا ، كوسيلة راحة ، اصطلاح سطر أوامر
يسمح لك بتحديد أي مجند يتم بالفعل `` إنشاء '' الملفات - أي مدمجة
في شجرة البناء. على سبيل المثال:

٪ سلبيات بناء + عالم

تقدم الوسيطة "+" تعبيرًا عاديًا لـ Perl. يجب بالطبع اقتباس هذا في
مستوى الصدفة إذا كان هناك أي أحرف وصفية للقذيفة داخل التعبير. ال
يتم مطابقة التعبير مقابل كل مجند الملف الذي تم ذكره في "بناء"
البيان ، ويتم دمج النصوص البرمجية ذات الأسماء المتطابقة فقط في ملف
بناء الشجرة. يُسمح بتعدد هذه الحجج ، وفي هذه الحالة يتم التطابق مع أي منها
يكفي لإدراج نص برمجي.

في المثال أعلاه ، فإن ملف مرحبا البرنامج لن يتم بناؤه ، حيث لن يكون هناك سلبيات
معرفة النص مرحبًا / مجند. libworld.a الأرشيف سيتم بناؤه ، ومع ذلك ، إذا
تحتاج.

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

مؤقت يتجاوز


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

٪ سلبيات - أكثر من التصدير

سوف يبني تصدير الدليل ، مع وجود جميع الملفات المشتقة الخاضعة للتجاوزات
في ال على مدى ملف. إذا تركت الخيار "-o" ، فكل ما يلزم إزالته
سيتم إعادة بناء جميع التجاوزات.

تجاوز بيئة المتغيرات

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

تجاوز أمر

النوع الثاني من التجاوز يتم إنجازه باستخدام الأمر "Override" ، الذي يبدو
هذه:

تجاوز و => و => ، ... ؛

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

لنفترض أن لدينا بيئة بناء مثل هذا:

CONS دولار = سلبيات جديدة (
COPT => '' ،
CDBG => "-g" ،
CFLAGS => '٪ COPT٪ CDBG' ،
);

ثم إذا كان لدينا ملف تجاوز على مدى تحتوي على هذا الأمر:

تجاوز '\ .o $'، COPT => '-O'، CDBG => ''؛

ثم أي احتجاج "سلبيات" مع "-o" ينتج عنه .o الملفات عبر هذه البيئة سوف
تسبب في أن يتم تجميعها باستخدام "-O" و لا "-g". يمكن أن يكون التجاوز ، بالطبع
يقتصر على دليل واحد من خلال التحديد المناسب للتعبير العادي.

ها هي النسخة الأصلية من Hello، World! برنامج مبني مع هذه البيئة.
لاحظ أن السلبيات تعيد بناء القطع المناسبة عند تطبيق التجاوز أو إزالته:

٪ سلبيات مرحبًا
CC -g -c hello.c -o hello.o
cc -o مرحبا hello.o
٪ سلبيات - مرحبًا
سم مكعب -O -c hello.c -o hello.o
cc -o مرحبا hello.o
٪ سلبيات - مرحبًا
السلبيات: كلمة "hello" محدثة.
٪ سلبيات مرحبًا
CC -g -c hello.c -o hello.o
cc -o مرحبا hello.o

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

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

المزيد on إنشاء البيئات


الترتيب إنشاء المتغيرات

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

$ env = سلبيات جديدة () ؛

يتم إنشاء إشارة إلى بيئة إنشاء افتراضية جديدة. هذا يحتوي على رقم
متغيرات البناء وبعض الطرق. في الوقت الحاضر ، القائمة الافتراضية
يتم تعريف متغيرات البناء على النحو التالي:

CC => "cc" ،
CFLAGS => '' ،
CCCOM => '٪ CC٪ CFLAGS٪ _IFLAGS -c٪ <-o٪>' ،
INCDIRPREFIX => "-I" ،
CXX => "٪ CC" ،
CXXFLAGS => '٪ CFLAGS' ،
CXXCOM => '٪ CXX٪ CXXFLAGS٪ _IFLAGS -c٪ <-o٪>' ،
الرابط => '٪ CXX' ،
LINKCOM => '٪ LINK٪ LDFLAGS -o٪>٪ <٪ _LDIRS٪ LIBS' ،
LINKMODULECOM => '٪ LD -r -o٪>٪ <' ،
LIBDIRPREFIX => "-L" ،
AR => 'ar' ،
ARFLAGS => 'r' ،
ARCOM => "٪ AR٪ ARFLAGS٪>٪ <\ n٪ RANLIB٪>" ،
RANLIB => 'ranlib' ،
AS => "as" ،
ASFLAGS => '' ،
أسكوم => '٪ AS٪ ASFLAGS٪ <-o٪>' ،
LD => 'ld' ،
LDFLAGS => '' ،
PREFLIB => 'lib' ،
SUFLIB => '.a'،
SUFLIBS => '.so: .a'،
SUFOBJ => ".o" ،
ENV => {'PATH' => '/ بن:/ البيرة / بن'}،

في أنظمة Win32 (Windows NT) ، يتم تجاوز متغيرات البناء التالية في
الافتراضي:

CC => 'cl' ،
CFLAGS => '/ nologo' ،
CCCOM => '٪ CC٪ CFLAGS٪ _IFLAGS / c٪ </ Fo٪>' ،
CXXCOM => '٪ CXX٪ CXXFLAGS٪ _IFLAGS / c٪ </ Fo٪>' ،
INCDIRPREFIX => '/ I' ،
LINK => "رابط" ،
LINKCOM => '٪ LINK٪ LDFLAGS / خارج:٪>٪ <٪ _LDIRS٪ LIBS' ،
LINKMODULECOM => '٪ LD / r / o٪>٪ <' ،
LIBDIRPREFIX => '/ LIBPATH:'،
AR => 'lib' ،
ARFLAGS => '/ nologo' ،
ARCOM => "٪ AR٪ ARFLAGS / خارج:٪>٪ <" ،
RANLIB => '' ،
LD => "رابط" ،
LDFLAGS => '/ nologo' ،
PREFLIB => '' ،
SUFEXE => ".exe" ،
SUFLIB => '.lib'،
SUFLIBS => '.dll: .lib'،
SUFOBJ => ".obj" ،

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

الكائنات $ env 'foo.c'، 'bar.c'؛

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

تستخدم متغيرات البناء أيضًا لأغراض أخرى. على سبيل المثال ، "CPPPATH" هي
تستخدم لتحديد مسار مفصول بنقطتين لتضمين الدلائل. هذه هي القصد منها أن تكون
تم تمريرها إلى المعالج الأولي C وتستخدم أيضًا بواسطة آلات مسح الملف C إلى
تحديد التبعيات المتضمنة في تجميع لغة سي. المتغيرات التي تبدأ ب
شرطة سفلية ، يتم إنشاؤها بواسطة طرق مختلفة ، ويجب اعتبارها عادةً `` داخلية ''
المتغيرات. على سبيل المثال ، عندما يتم استدعاء طريقة تستدعي إنشاء كائن
من مصدر C ، يتم إنشاء المتغير "_IFLAGS": وهذا يتوافق مع المفاتيح "-I"
مطلوب من قبل مترجم لغة سي لتمثيل الدلائل المحددة بواسطة "CPPPATH".

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

توفر جميع المتغيرات "CFLAGS" و "LDFLAGS" و "ARFLAGS" مكانًا لتمرير الخيارات إلى
المترجم والمحمل والمحرر على التوالي. أقل وضوحا ، "INCDIRPREFIX"
متغير يحدد سلسلة الخيار التي سيتم إلحاقها ببداية كل تضمين
الدليل بحيث يعرف المترجم مكان العثور عليه .h الملفات. وبالمثل ، فإن
يحدد متغير "LIBDIRPREFIX" سلسلة الخيار المراد إلحاقها ببداية
كل دليل يجب أن يبحث الرابط عن المكتبات.

متغير آخر ، "ENV" ، يستخدم لتحديد بيئة النظام أثناء التنفيذ
لأمر خارجي. بشكل افتراضي ، متغير البيئة الوحيد الذي تم تعيينه هو "PATH" ،
وهو مسار تنفيذ أمر UNIX. لأقصى قدر من التكاثر ، يجب عليك
الترتيب حقًا لتعيين مسار التنفيذ الخاص بك ، في المستوى الأعلى بناء ملف (أو
ربما عن طريق استيراد حزمة بناء مناسبة باستخدام أمر Perl "use"). ال
تهدف المتغيرات الافتراضية إلى إبعادك عن الأرض.

تحريف إنشاء المتغيرات

يمكن استيفاء متغيرات بيئة البناء في أسماء الملفات المصدر والهدف
من خلال وضع بادئة على اسم متغير البناء بـ "٪".

$ env = سلبيات جديدة (
DESTDIR => "البرامج" ،
SRCDIR => 'src' ،
);
برنامج $ env '٪ DESTDIR / hello'، '٪ SRCDIR / hello.c'؛

توسيع متغيرات البناء تكراري - أي الملف الاسم(ق) سيتم إعادة-
حتى لا يمكن إجراء المزيد من الاستبدالات. إذا لم يكن متغير البناء
المعرفة في البيئة ، ثم سيتم استبدال سلسلة فارغة.

الترتيب إنشاء طرق


تتضمن قائمة طرق البناء الافتراضية ما يلي:

"جديد" منشئ

الطريقة "الجديدة" هي مُنشئ كائن Perl. أي أنه لا يتم استدعاؤه عبر مرجع
لبيئة البناء الحالية مرجع، ولكن ، بشكل ثابت ، باستخدام الاسم
بيرل صفقة حيث يتم تعريف المنشئ. يتم استدعاء الطريقة على النحو التالي:

$ env = سلبيات جديدة ( ) ؛

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

"استنساخ" طريقة

طريقة "الاستنساخ" تخلق نسخة من بيئة البناء الحالية ، ويمكن أن تكون كذلك
يسمى كما في المثال التالي:

$ env2 = $ env1-> clone ( ) ؛

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

"نسخ" طريقة

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

٪ env = $ env1-> نسخ ( ) ؛

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

٪ سلبيات = سلبيات جديدة () -> نسخ () ؛
$ cons {ENV} {PATH} = " "؛
سلبيات $ = سلبيات جديدة (٪ سلبيات) ؛

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

"تثبيت" طريقة

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

قم بتثبيت $ env و ؛

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

تثبيت طريقة

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

يعمل "InstallAs" بطريقتين:

تثبيت ملف واحد:

InstallAs $ env TgtFile، SrcFile؛

تثبيت ملفات متعددة:

InstallAs $ env ['tgt1'، 'tgt2']، ['src1'، 'src2']؛

أو حتى:

srcs = qw (src1 src2 src3) ؛
tgts = qw (tgt1 tgt2 tgt3) ؛
InstallAs $ env [tgts]، [srcs]؛

يجب أن يكون كل من الهدف وقائمة المصادر بنفس الطول.

"الثمين" طريقة

تطلب الطريقة "الثمينة" عدم حذف الملف المحدد أو قائمة الملفات من قبل
بناءها مرة أخرى. يتم الاحتجاج به على النحو التالي:

ثمين ؛

هذا مفيد بشكل خاص للسماح بالتحديثات المتزايدة للمكتبات أو التصحيح
ملفات المعلومات التي يتم تحديثها بدلاً من إعادة بنائها من جديد في كل مرة. سوف لا تزال سلبيات
احذف الملفات عند تحديد علامة "-r".

"القيادة" طريقة

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

الأمر $ env و و ؛

الهدف يعتمد على قائمة ملفات الإدخال المحددة ، ويجب أن تكون المدخلات
يتم بناؤها بنجاح أو لن تحاول العيوب بناء الهدف.

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

هناك العديد من المتغيرات الزائفة التي سيتم توسيعها أيضًا:

٪> اسم الملف الهدف (في أمر متعدد الأهداف ، يكون هذا دائمًا الهدف الأول
مذكور).

٪ 0 مثل "٪>".

٪ 1 ،٪ 2 ، ... ،٪ 9
هذه تشير إلى ملف الإدخال الأول من خلال التاسع ، على التوالي.

٪ <المجموعة الكاملة من المدخلات. إذا تم استخدام أي من هذه في أي مكان آخر في
سطر الأوامر الحالي (عبر "٪ 1" ، "٪ 2" ، إلخ.) ، ثم سيتم حذفها من ملف
القائمة المقدمة من "٪ <". ضع في اعتبارك الأمر التالي الموجود في ملف مجند ملف
في ال تجربه بالعربي دليل:

الأمر $ env 'tgt' ، qw (foo bar baz) ، qq (
صدى٪ <-i٪ 1>٪>
صدى٪ <-i٪ 2 >>٪>
صدى٪ <-i٪ 3 >>٪>
);

If TGT بحاجة إلى تحديث ، فسيؤدي ذلك إلى تنفيذ ملف
الأوامر التالية ، على افتراض أنه لم يتم إنشاء إعادة تعيين لـ تجربه بالعربي
دليل:

اختبار الصدى / اختبار الشريط / باز-أنا اختبار / فو> اختبار / tgt
اختبار الصدى / اختبار فو / اختبار باز-أنا / شريط >> اختبار / tgt
اختبار الصدى / اختبار فو / بار-أنا اختبار / باز >> اختبار / tgt

يمكن أن يتبع أي من المتغيرات الزائفة المذكورة أعلاه على الفور أحد المتغيرات التالية
لاحقات لتحديد جزء من اسم المسار الموسع:

: المسار المطلق لاسم الملف
: b الدليل بالإضافة إلى اسم الملف الذي تم تجريده من أي لاحقة
: د الدليل
: f اسم الملف
: s لاحقة اسم الملف
: F اسم الملف تم تجريده من أي لاحقة

متابعة للمثال أعلاه ، ستتوسع القيمة "٪ <: f" إلى "foo bar baz" و "٪": d>
توسع إلى "الاختبار".

من الممكن إعادة كتابة جزء من الأمر برمجيًا من خلال إرفاق جزء منه
بين "٪ [" و "٪]". سيؤدي هذا إلى استدعاء متغير البناء المسمى بالكلمة الأولى
بين قوسين كمرجع كود Perl ؛ سيتم استخدام نتائج هذه المكالمة
لاستبدال محتويات الأقواس في سطر الأوامر. على سبيل المثال ، نظرًا لامتداد
ملف الإدخال الحالي المسمى tgt.in:

keywords = qw (foo bar baz) ؛
$ env = سلبيات جديدة (X_COMMA => فرعي {انضم ("،"،_)})؛
الأمر $ env 'tgt'، 'tgt.in'، qq (
صدى '# الكلمات الرئيسية:٪ [X_COMMAkeywords٪]'>٪>
قطة٪ <>>٪>
);

سينفذ هذا:

echo '# Keywords: foo، bar، baz'> tgt
القط tgt.in >> tgt

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

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

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

يُفترض أن تكون الكلمة الأولى من كل سلسلة أوامر قابلة للتنفيذ بعد التوسيع
بحث الأمر عن متغير البيئة "PATH" (والذي يتم تحديده بدوره بواسطة ملف
متغير البناء "ENV"). إذا تم العثور على هذا الأمر على المسار ، فسيكون الهدف
تعتمد عليه: سيتم بناء الأمر تلقائيًا ، حسب الضرورة. إنه
من الممكن كتابة أوامر متعددة الأجزاء لبعض الأصداف ، مفصولة بفاصلة منقوطة. فقط
سيتم الاعتماد على كلمة الأمر الأولى ، ومع ذلك ، إذا كتبت سلاسل الأوامر الخاصة بك
بهذه الطريقة ، يجب عليك إما إعداد تبعية صراحة (باستخدام طريقة "Depends") ، أو
تأكد من أن الأمر الذي تستخدمه هو أمر نظام متوقع أن يكون
متاح. إذا لم يكن متاحًا ، فستحصل بالطبع على خطأ.

إذا بدأ أي أمر (حتى واحد داخل أمر متعدد الأسطر) بـ "[perl]" ، فإن الباقي
من سطر الأوامر هذا سيتم تقييمه بواسطة Perl قيد التشغيل بدلاً من أن يكون متشعبًا بواسطة
صدَفَة. إذا حدث خطأ في تحليل Perl أو إذا كان تعبير Perl يُرجع 0 أو
undef ، سيتم اعتبار الأمر قد فشل. على سبيل المثال ، هنا بسيط
الأمر الذي يقوم بإنشاء ملف "foo" مباشرة من Perl:

$ env = سلبيات جديدة () ؛
Command $ env 'foo'،
qq ([perl] open (FOO، '> foo')؛ طباعة FOO "hi \\ n"؛ close (FOO)؛ 1)؛

لاحظ أنه عند تنفيذ الأمر ، تكون في نفس الحزمة كما هو الحال عندما يكون ملف بناء
or مجند تمت قراءة الملف ، لذا يمكنك استدعاء وظائف Perl التي قمت بتعريفها بنفسه
بناء or مجند الملف الذي يظهر فيه "الأمر":

$ env = سلبيات جديدة () ؛
إنشاء ملف فرعي {
ملفي $ = shift ؛
فتح (FILE، "> $ file") ؛
طباعة FILE "hi \ n" ؛
إغلاق الملف)؛
1 العودة؛
}
الأمر $ env 'foo'، "[perl] & create_file ('٪>')"؛

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

تقوم العيوب عادة بطباعة أمر قبل تنفيذه. يتم منع هذا السلوك إذا كان
الحرف الأول من الأمر هو "@". لاحظ أنك قد تحتاج إلى فصل "@" عن
اسم الأمر أو تخلص منه لمنع "cmd" من الظهور كمصفوفة في اقتباس Perl
العوامل التي تقوم بالاستيفاء:

# سطر الأوامر الأول غير صحيح ،
# لأن "cp" يشبه المصفوفة
# لوظيفة Perl qq //.
# استخدم النموذج الثاني بدلاً من ذلك.
الأمر $ env 'foo'، 'foo.in'، qq (
cp٪ <tempfile
@ cp tempfile٪>
);

إذا كانت هناك أحرف وصفية للصدفة في أي مكان في سطر الأوامر الموسع ، مثل "<" ،
">" أو علامات الاقتباس أو الفاصلة المنقوطة ، فسيتم تنفيذ الأمر فعليًا عن طريق استدعاء a
صدَفَة. هذا يعني أن أمرًا مثل:

القرص المضغوط فو

وحدها ستفشل عادةً ، نظرًا لعدم وجود أمر "cd" على المسار. لكن الأمر
خيط:

cd $ <: d ؛ tar cf $>: f $ <: f

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

لتحديد أمر بأهداف متعددة ، يمكنك تحديد مرجع لقائمة
الأهداف. في لغة Perl ، يمكن إنشاء مرجع قائمة بإحاطة قائمة بأقواس مربعة.
ومن هنا جاء الأمر التالي:

الأمر $ env ['foo.h'، 'foo.c']، 'foo.template'، q (
الجيل٪ 1
);

يمكن استخدامها في الحالة التي يُنشئ فيها الأمر "gen" ملفين ، كلاهما foo.h و foo.c.

`أشياء' طريقة

يرتب أسلوب "الكائنات" لإنشاء ملفات الكائنات التي تتوافق مع المحدد
ملفات المصدر. يتم استدعاؤه كما هو موضح أدناه:

files = كائنات $ env ؛

ضمن Unix ، تنتهي ملفات المصدر بـ .s و .c مدعومة حاليًا ، وسيتم تجميعها
إلى اسم الملف نفسه الذي ينتهي بـ .o. بشكل افتراضي ، يتم إنشاء جميع الملفات عن طريق استدعاء
الأمر الخارجي الذي ينتج عن توسيع متغير البناء "CCCOM" ، بامتداد
تم تعيين "٪ <" و "٪>" على ملفات المصدر والكائن ، على التوالي (انظر طريقة "الأوامر"
للحصول على تفاصيل التوسع). يستخدم المتغير "CPPPATH" أيضًا عند فحص ملفات المصدر
من أجل التبعيات. هذه قائمة بأسماء المسار مفصولة بنقطتين ، وتستخدم أيضًا لإنشاء
متغير البناء "_IFLAGS" ، والذي سيحتوي على القائمة المناسبة لـ -`I "
خيارات التجميع. يتم تفسير أي اسم مسار نسبي في "CPPPATH" نسبيًا
إلى الدليل الذي تم فيه إنشاء بيئة البناء المرتبطة (مطلق
والأسماء ذات الصلة العليا). يستخدم هذا المتغير من قبل "CCCOM". السلوك
من هذا الأمر يمكن تعديله عن طريق تغيير أي من المتغيرات التي يتم إقحامها
إلى "CCCOM" ، مثل "CC" و "CFLAGS" و "CPPPATH" بشكل غير مباشر. من الممكن أيضًا
استبدل قيمة "CCCOM" نفسها. للتيسير ، يُرجع هذا الملف قائمة ملفات
أسماء ملفات الكائنات.

"البرنامج" طريقة

وترتب طريقة "البرنامج" لربط البرنامج المحدد بالكائن المحدد
الملفات. يتم استدعاؤه بالطريقة التالية:

برنامج $ env و ؛

سيكون لاسم البرنامج قيمة متغير البناء "SUFEXE" ملحقة (بواسطة
افتراضي ، ".exe" في أنظمة Win32 ، لا شيء على أنظمة Unix) إذا لم تكن اللاحقة موجودة بالفعل
حاضر.

يمكن تحديد ملفات المصدر بدلاً من ملفات الكائنات - ستكون طريقة "الكائنات" هي
تم استدعاؤها لترتيب تحويل جميع الملفات إلى ملفات كائنات ، وبالتالي جميع ملفات
الملاحظات حول طريقة "الكائنات" المذكورة أعلاه تنطبق على هذه الطريقة أيضًا.

سيتم التعامل مع الارتباط الفعلي للبرنامج بواسطة أمر خارجي ينتج عنه
من توسيع متغير الإنشاء "LINKCOM" ، مع تعيين "٪ <" على ملفات الكائن إلى
يتم ربطها (بالترتيب المقدم) ، وتعيين "٪>" على الهدف (انظر طريقة "الأوامر"
للحصول على تفاصيل التوسع). يجوز للمستخدم تعيين متغيرات إضافية في البناء
البيئة ، بما في ذلك "LINK" ، لتحديد البرنامج الذي سيتم استخدامه للربط ، "LIBPATH" ، أ
قائمة مسارات بحث المكتبة مفصولة بنقطتين ، للاستخدام مع مواصفات مكتبة
النموذج المرفق -ليب، و "LIBS" ، مع تحديد قائمة المكتبات المراد الارتباط بها (في أيٍّ منهما -ليب
شكل أو مجرد أسماء المسار. يتم تفسير أسماء المسار النسبية في كل من "LIBPATH" و "LIBS"
بالنسبة للدليل الذي يتم فيه إنشاء بيئة البناء المرتبطة
(يمكن أيضًا استخدام الأسماء المطلقة والنسبية الأعلى). يتم إعداد سلبيات تلقائيًا
التبعيات على أي مكتبات مذكورة في LIBS: سيتم إنشاء تلك المكتبات من قبل
الأمر مرتبط.

"المكتبة" طريقة

ترتب طريقة "المكتبة" لإنشاء المكتبة المحددة من الكائن المحدد
الملفات. يتم الاحتجاج به على النحو التالي:

مكتبة $ env و ؛

سيكون اسم المكتبة مُلحقًا بقيمة متغير البناء "SUFLIB" (بواسطة
افتراضي ، ".lib" في أنظمة Win32 ، ".a" في أنظمة Unix) إذا لم تكن اللاحقة موجودة بالفعل
حاضر.

يمكن تحديد ملفات المصدر بدلاً من ملفات الكائنات - ستكون طريقة "الكائنات" هي
تم استدعاؤها لترتيب تحويل جميع الملفات إلى ملفات كائنات ، وبالتالي جميع ملفات
الملاحظات حول طريقة "الكائنات" المذكورة أعلاه تنطبق على هذه الطريقة أيضًا.

سيتم التعامل مع الإنشاء الفعلي للمكتبة بواسطة أمر خارجي ينتج عنه
من توسيع متغير البناء "ARCOM" ، مع تعيين "٪ <" لأعضاء المكتبة (بتنسيق
بالترتيب المقدم) ، و "٪>" إلى المكتبة المراد إنشاؤها (انظر طريقة "الأوامر" الخاصة بـ
تفاصيل التوسع). يجوز للمستخدم تحديد المتغيرات في بيئة البناء التي سوف
تؤثر على عمل الأمر. وتشمل هذه "AR" ، برنامج الأرشيف المراد استخدامه ،
"ARFLAGS" ، التي يمكن استخدامها لتعديل العلامات المعطاة للبرنامج المحدد بواسطة "AR" ،
و "RANLIB" ، اسم برنامج إنشاء فهرس الأرشيف ، إذا لزم الأمر (إذا لزم الأمر
لا تتطلب الوظيفة الأخيرة ، ثم يجب إعادة تعريف "ARCOM" إلى لا
مرجع "RANLIB").

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

"وحدة" طريقة

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

الوحدة $ env و و ؛

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

"يعتمد" طريقة

تسمح لك طريقة "Depends" بتحديد تبعيات إضافية للهدف. إنها
تم الاحتجاج به على النحو التالي:

يعتمد $ env و ؛

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

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

يعتمد على $ env ['foo'، 'bar']، 'input_file_1'، 'input_file_2'؛

يحدد أن كلا من فو و شريط تعتمد الملفات على ملفات الإدخال المدرجة.

تجاهل طريقة

تسمح لك طريقة "التجاهل" بتجاهل التبعيات التي تستنتجها "سلبيات" بشكل صريح
ملك. يتم الاحتجاج به على النحو التالي:

يتجاهل ؛

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

على سبيل المثال ، إذا تم إنشاء برنامج في دليل مُحمّل على NFS على أنظمة متعددة
نسخ مختلفة من stdio.h، ستؤثر الاختلافات على توقيعات الجميع
أهداف مشتقة مبنية من ملفات المصدر التي `` تتضمن # ملفات ". هذا سوف يسبب كل شيء
يجب إعادة بناء تلك الأهداف عند تغيير الأنظمة. إذا كان هذا غير مرغوب فيه ،
ثم السطر التالي سيزيل التبعيات على stdio.h ملف:

تجاهل '^ / usr / include / stdio \ .h $' ؛

لاحظ أن وسيطات طريقة "التجاهل" هي تعبيرات نمطية ، لذا فهي خاصة
يجب تخطي الأحرف وقد ترغب في إرساء بداية أو نهاية ملف
تعبير بأحرف `` ^ '' أو `` $ ''.

`` ملح '' طريقة

تضيف طريقة "الملح" قيمة ثابتة لحساب التوقيع لكل مشتق
ملف. يتم الاحتجاج به على النحو التالي:

سلسلة الملح $؛

سيؤدي تغيير قيمة Salt إلى إعادة بناء كاملة لكل ملف مشتق. هذا يمكن أن يكون
تستخدم لفرض إعادة البناء في ظروف معينة مرغوبة. على سبيل المثال،

ملح "uname -s" ؛

سيفرض إعادة بناء كاملة لكل ملف مشتق كلما تم تشغيل نظام التشغيل
التي تم تنفيذ البناء (كما ورد من قبل "uname -s") التغييرات.

"UseCache" طريقة

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

UseCache ("ذاكرة التخزين المؤقت / ") ⎪⎪ warn (" دليل ذاكرة التخزين المؤقت غير موجود ") ؛

"مسار المصدر" طريقة

تُرجع الرياضيات "SourcePath" اسم مسار المصدر الحقيقي لملف ، كما هو الحال مع ملف
اسم المسار داخل دليل البناء. يتم الاحتجاج به على النحو التالي:

$ path = SourcePath ؛

"مسار السلبيات" طريقة

طريقة "ConsPath" ترجع صحيحًا إذا كان المسار الموفر ملفًا قابلًا للاشتقاق ، وترجع
undef (خطأ) خلاف ذلك. يتم الاحتجاج به على النحو التالي:

النتيجة $ = ConsPath ؛

"سبليت باث" طريقة

تبحث طريقة "SplitPath" عن أسماء مسارات متعددة في سلسلة مفصولة افتراضيًا
فاصل المسار لنظام التشغيل (':' في أنظمة UNIX ، '؛' في Windows NT) ، و
إرجاع الأسماء المؤهلة بالكامل. يتم الاحتجاج به على النحو التالي:

paths = SplitPath ؛

ستعمل طريقة "SplitPath" على تحويل الأسماء المسبوقة بـ "#" إلى بنية المستوى الأعلى المناسبة
name (بدون "#") وسيتم تحويل الأسماء النسبية إلى أسماء المستوى الأعلى.

"ديرباث" طريقة

طريقة "DirPath" ترجع مسار البناء الاسم(ق) من دليل أو قائمة من الدلائل.
يتم الاحتجاج به على النحو التالي:

$ cwd = DirPath ؛

الاستخدام الأكثر شيوعًا لطريقة DirPath هو:

$ cwd = DirPath '.'؛

لجلب المسار إلى الدليل الحالي لشركة تابعة مجند ملف.

"مسار الملف" طريقة

تقوم طريقة FilePath بإرجاع مسار البناء الاسم(ق) من ملف أو قائمة الملفات. إنها
تم الاحتجاج به على النحو التالي:

$ file = مسار الملف ؛

مساعدة طريقة

تحدد طريقة "Help" نص المساعدة الذي سيتم عرضه عندما يستدعي المستخدم "cons
-ح '. يمكن استخدام هذا لتوفير توثيق لأهداف وقيم وبنية محددة
خيارات ، وما إلى ذلك لشجرة البناء. يتم الاحتجاج به على النحو التالي:

يساعد ؛

لا يمكن استدعاء طريقة "المساعدة" إلا مرة واحدة ، ويجب تحديدها عادةً في الجزء العلوي-
مستوى بناء ملف.

تمتد سلبيات


تجاوز إنشاء المتغيرات

هناك عدة طرق لتوسيع نطاق السلبيات ، والتي تختلف في درجة الصعوبة. الابسط
الطريقة هي تحديد بيئة البناء الخاصة بك ، بناءً على البيئة الافتراضية ،
ولكن تم تعديلها لتعكس احتياجاتك الخاصة. هذا غالبا ما يكون كافيا بالنسبة للـ C.
التطبيقات. يمكنك استخدام "المُنشئ" الجديد وطريقتَي "النسخ" و "النسخ" إلى
خلق بيئات هجينة. يمكن أن تكون هذه التغييرات شفافة تمامًا للأساس
مجند الملفات.

إضافة جديد طرق

لإجراء تغييرات أكثر تطلبًا ، قد ترغب في إضافة طرق جديدة إلى "السلبيات"
طَرد. فيما يلي مثال على ملحق بسيط للغاية ، "InstallScript" ، والذي يقوم بتثبيت ملف
نص برمجي tcl في موقع مطلوب ، ولكن يقوم بتحرير النص أولاً ليعكس نظامًا أساسيًا-
مسار تابع يجب تثبيته في البرنامج النصي:

# cons :: InstallScript - إنشاء إصدار من الصَدَفة يعتمد على النظام الأساسي
# script عن طريق استبدال السلسلة `` #! your-path-here '' بأخرى خاصة بالنظام الأساسي
# مسار $ BIN_DIR.

سلبيات فرعية :: InstallScript {
($ env، $ dst، $ src) =_؛
الأمر $ env $ dst ، $ src ، qq (
sed s + your-path-here + $ BIN_DIR +٪ <>٪>
chmod oug + x٪>
);
}

لاحظ أن هذه الطريقة مُعرَّفة مباشرةً في الحزمة "cons" (بادئة الاسم
مع "سلبيات ::"). سيكون التغيير الذي يتم إجراؤه بهذه الطريقة مرئيًا على مستوى العالم لجميع البيئات ،
ويمكن استدعاؤها كما في المثال التالي:

InstallScript $ env "$ BIN / foo"، "foo.tcl"؛

لتحسين طفيف في العمومية ، يمكن تمرير متغير "BINDIR" كملف
حجة أو مأخوذة من بيئة البناء - كـ "٪ BINDIR".

تجاوز طرق

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

يحدد المثال التالي حزمة جديدة "cons :: switch" تتجاوز المعيار
طريقة "المكتبة". الطريقة المتجاوزة تبني وحدات مكتبة مرتبطة ، بدلاً من مكتبة
أرشيف. يتم توفير مُنشئ جديد. البيئات التي تم إنشاؤها باستخدام هذا المُنشئ سوف
لديك طريقة المكتبة الجديدة ؛ لن يفعل الآخرون.

سلبيات الحزمة :: التبديل ؛
ابدأ {ISA = 'cons'}

فرعية جديدة {
يحول؛
يبارك سلبيات جديدة (_) ؛
}

المكتبة الفرعية {
بلدي ($ env) = تحول ؛
بلدي (ليب دولار) = التحول ؛
my (objs) = الكائنات $ env_ ؛
الأمر $ env $ lib،objs، q (
٪ LD -r٪ LDFLAGS٪ <-o٪>
);
}

يمكن استدعاء هذه الوظيفة كما في المثال التالي:

$ env = سلبيات جديدة :: switch (overrides) ؛

Library $ env 'lib.o'، 'foo.c'، 'bar.c'؛

الاحتجاج سلبيات


عادة ما يتم استدعاء الأمر "cons" من جذر شجرة البناء. أ بناء ملف
يجب أن تكون موجودة في هذا الدليل. إذا تم استخدام الوسيطة "-f" ، فعندئذٍ بديل بناء
يمكن استخدام ملف (وربما جذر بديل ، لأن كلمة "سلبيات" سوف cd to بناء
يحتوي الملف على دليل).

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

٪ cd libfoo / subdir
٪ سلبيات - الهدف

يعادل بالضبط:

٪ سلبيات libfoo / subdir / الهدف

إذا كانت هناك أية أهداف "افتراضية" محددة في التسلسل الهرمي للدليل بناء or
مجند الملفات ، فقط الأهداف الافتراضية في أو أسفل الدليل الذي منه "cons -t"
تم الاحتجاج به سيتم بناؤه.

يتم استدعاء الأمر على النحو التالي:

سلبيات -

أين الحجج يمكن أن يكون أيًا مما يلي ، بأي ترتيب:

الهدف بناء الهدف المحدد. لو الهدف هو دليل ، ثم بناء بشكل متكرر
كل شيء داخل هذا الدليل.

+ نمط الحد من مجند تعتبر الملفات المتطابقة فقط النمط، والذي هو
أ التعبير العادي في لغة بيرل. يتم قبول وسيطات "+" المتعددة.

الاسم=
باكجات الاسم إلى قيمة فال في تجزئة "ARG" تم تمريرها إلى المستوى الأعلى بناء ملف.

"-cc 'Show الأمر الذي كان من الممكن تنفيذه ، عند الاسترداد من ذاكرة التخزين المؤقت. لا
تم إعطاء إشارة إلى أن الملف قد تم استرداده ؛ هذا مفيد ل
إنشاء سجلات إنشاء يمكن مقارنتها بسجلات إنشاء حقيقية.

"-cd 'تعطيل كافة التخزين المؤقت. لا تسترجع من ذاكرة التخزين المؤقت ولا تتدفق إلى ذاكرة التخزين المؤقت.

"-cr '' قم ببناء التبعيات بترتيب عشوائي. هذا مفيد عند بناء متعددة
أشجار مماثلة مع تمكين التخزين المؤقت.

"-cs" لمزامنة أهداف البناء الموجودة التي تم تحديثها باستخدام ذاكرة التخزين المؤقت.
يكون هذا مفيدًا إذا تم تعطيل التخزين المؤقت باستخدام -cc أو تم تمكينه مؤخرًا
مع UseCache.

"-d" تمكين تصحيح التبعية.

"-f"
استخدم الملف المحدد بدلاً من بناء (لكن التغيير الأول إلى احتواء
دليل ملف).

"-h '' اعرض رسالة تعليمات محلية للبنية الحالية إذا تم تعريف أحدها ، واخرج.

"-k 'استمر في الذهاب بعيدًا قدر الإمكان بعد الأخطاء.

"-o"
قراءة ملف التجاوز ملف.

"-p" عرض منتجات البناء في الأشجار المحددة. لم تتم محاولة أي بناء.

"-pa" عرض منتجات البناء والإجراءات المرتبطة بها. لم تتم محاولة أي بناء.

"-pw" عرض المنتجات وأين يتم تعريفها. لم تتم محاولة أي بناء.

"-q 'لا تسهب في تثبيت الأهداف وإزالتها.

"-r 'إزالة منتجات البناء المرتبطة بـ . لم تتم محاولة أي بناء.

"-R"
ابحث عن الملفات بتنسيق اتفاقيات إعادة الشراء. مضاعف -R اتفاقيات إعادة الشراء يتم البحث في الدلائل في
النظام المحدد.

"-t 'اجتياز التسلسل الهرمي للدليل بحثًا عن ملف بناء الملف ، إذا لم يكن موجودًا
في الدليل الحالي. سيتم تعديل الأهداف لتكون ذات صلة بـ
بناء ملف.

"-v 'عرض إصدار" سلبيات "ومواصلة المعالجة.

"-V 'عرض إصدار" سلبيات "والخروج.

"-wf"
كتابة جميع أسماء الملفات في الاعتبار ملف.

"-x" اعرض رسالة مساعدة مشابهة لهذه ، واخرج.

و بناء أرجس يمكن أن تكون أي حجج ترغب في معالجتها في بناء ملف.
لاحظ أنه يجب أن يكون هناك ملف -- فصل الحجج إلى السلبيات والحجج التي تقوم بها
ترغب في معالجة في بناء ملف.

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

٪ cons -R / usr / local / repository -d os = solaris + driver - -c test -f DEBUG

سوف تمرر ما يلي إلى سلبيات

-R / usr / local / repository -d os = solaris + سائق

وما يليها إلى المستوى الأعلى بناء ملف باسم ARGV

-c اختبار -f DEBUG

لاحظ أن "cons -r." تعادل كلمة "make clean" تكرارية كاملة ، ولكنها لا تتطلب ذلك
الدعم في بناء ملف أو أي مجند الملفات. هذا مفيد للغاية إذا كنت
تجميع الملفات في أدلة المصدر (إذا قمت بفصل ملف نساعدك في بناء و تصدير الدلائل
ثم يمكنك فقط إزالة الدلائل).

تعد الخيارات "-p" و "-pa" و "-pw" مفيدة للغاية للاستخدام كأداة مساعدة في القراءة
البرامج النصية أو تصحيحها. إذا كنت تريد معرفة ما يتم تثبيت البرنامج النصي تصدير / تضمين / foo.h,
على سبيل المثال ، اكتب فقط:

٪ cons -pw تصدير / تضمين / foo.h

باستخدام و جاري الكتابة التبعية الماسحات الضوئية


يسمح QuickScan بإعداد ماسحات ضوئية بسيطة مستقلة عن الهدف لملفات المصدر. فقط
قد يتم ربط ماسح ضوئي واحد QuickScan بأي ملف مصدر وبيئة معينة.

يتم استدعاء QuickScan على النحو التالي:

QuickScan CONSENV CODEREF، FILENAME [، PATH]

من المتوقع أن يعرض الإجراء الفرعي المشار إليه بواسطة CODEREF قائمة بأسماء الملفات المضمنة
مباشرة بواسطة FILE. سيتم مسح أسماء الملفات هذه بدورها. وسيطة PATH الاختيارية
يوفر مسار بحث للعثور على FILENAME و / أو الملفات التي تم إرجاعها بواسطة الموفر من قبل المستخدم
روتين فرعي. قد يكون PATH مرجعًا إلى مصفوفة أسماء دليل البحث ، أو a
سلسلة من الأسماء مفصولة بالحرف الفاصل للنظام (':' في أنظمة UNIX ، '؛' on
ويندوز إن تي).

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

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

هذا مثال حقيقي مأخوذ من a بناء ملف هنا:

سلبيات فرعية :: SMFgen {
my ($ env،tables) =_؛
foreach $ t (tables) {
$ env-> QuickScan (sub {/\b\S*؟\.smf\b/g}، "$ t.smf"،
env $ -> {SMF_INCLUDE_PATH}) ؛
$ env-> الأمر (
["$ t.smdb.cc"، "$ t.smdb.h"، "$ t.snmp.cc"، "$ t.ami.cc"، "$ t.http.cc"]،
"$ t.smf"،
q(
smfgen٪ (٪ SMF_INCLUDE_OPT٪)٪
)
);
}
}

[لاحظ أن النموذج "$ env-> QuickScan ..." و "env-> Command ..." لا يجب أن يكونا كذلك
ضروري ، ولكن ، لسبب ما ، مطلوب لهذا الاحتجاج بالذات. يظهر هذا
أن أكون خطأ في Perl أو سوء فهم من جانبي ؛ هذا النمط من الاحتجاج لا
يبدو دائمًا أنه ضروري.]

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

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

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

myscan الفرعية {
my (includes) ؛
افعل
دفع (@ include، / \b\S*؟\.smf\b/g) ؛
} بينما ؛
@يشمل
}

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

QuickScan $ env \ myscan، "$ _. smf"؛

الدعم لأي لبس اقتراحات


يتم الحفاظ على السلبيات من قبل مجتمع المستخدمين. للاشتراك ، أرسل بريدًا إلى سلبيات- مناقشة-
[البريد الإلكتروني محمي] بالجسم الاشتراك.

الرجاء الإبلاغ عن أي اقتراحات من خلال [البريد الإلكتروني محمي] القائمة البريدية.

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


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

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

  • 1
    تركديفوبس
    تركديفوبس
    TurkDevOps a�؟ k kaynak yaz؟ l؟ m
    geli؟ tirici topluluklar؟ فريق DevTurks
    Taraf؟ ndan desteklenmektedir ..
    الميزات: https: //github.com/turkdevopshttps: //turkdevops.g ...
    تحميل turkdevops
  • 2
    asammdf
    asammdf
    * asammdf * هو محلل لغة بايثون سريع و
    محرر ASAM (Associtation for
    توحيد الأتمتة و
    أنظمة القياس) MDF / MF4
    (تنسيق بيانات القياس ...
    تحميل ملف asammdf
  • 3
    عرجاء (Lame Aint an MP3 Encoder)
    عرجاء (Lame Aint an MP3 Encoder)
    LAME هي أداة تعليمية يمكن استخدامها
    للتعرف على ترميز MP3. ال
    الهدف من مشروع LAME هو التحسين
    الصوتيات النفسية والجودة والسرعة
    النائب ...
    تنزيل LAME (Lame Aint an MP3 Encoder)
  • 4
    wxPython
    wxPython
    وهناك مجموعة من وحدات تمديد بايثون التي
    التفاف فئات واجهة المستخدم الرسومية عبر الأنظمة الأساسية من
    wxWidgets .. الجمهور: المطورين. المستعمل
    الواجهة: X Window System (X11) ، Win32 ...
    تنزيل wxPython
  • 5
    com.packfilemanager
    com.packfilemanager
    هذا هو مدير ملفات حزمة Total War
    المشروع ، بدءًا من الإصدار 1.7. أ
    مقدمة قصيرة عن وارسكيب
    التعديل: ...
    تنزيل packfilemanager
  • 6
    IPerf2
    IPerf2
    أداة قياس حركة مرور الشبكة
    أداء TCP و UDP مع المقاييس
    حول كل من الإنتاجية والكمون. ال
    تشمل الأهداف الحفاظ على نشاط
    كود iperf ...
    تنزيل IPerf2
  • أكثر "

أوامر لينكس

Ad