هذا هو الأمر makepp الذي يمكن تشغيله في مزود الاستضافة المجانية OnWorks باستخدام إحدى محطات العمل المجانية المتعددة على الإنترنت مثل Ubuntu Online أو Fedora Online أو محاكي Windows عبر الإنترنت أو محاكي MAC OS عبر الإنترنت
برنامج:
اسم
makepp - بديل متوافق ولكن محسّن للماكينة
موجز
com.makepp [-e] [-C دير ] [ -F MAKEFILE] [ -F makefile_or_dir ]
[-j n] [ -كم طريقة ] [- ملفات noremake-makefiles]
[--nowarn] [-q] [-R دير] [- صنع تقليدي متكرر]
[-v] [الإصدار] [ VAR = القيمة ...] [ الهدف ...]
MPP [-خيارات] [ VAR = القيمة ...] [ الهدف ...]
الوصف
Makepp ، برنامج بناء يحتوي على عدد من الميزات التي تسمح ببنيات موثوقة و
أبسط ملفات البناء ، هو بديل مؤقت لـ GNU make. إنه يدعم تقريبًا كل ملفات
بناء الجملة الذي يقدمه جنو يدعم ، ويمكن استخدامه مع ملفات makefiles التي تنتجها أدوات مساعدة مثل
مثل automake. يطلق عليه makepp (أو جعل ++) لأنه تم تصميمه بدعم خاص
لـ C ++ ، والتي تم تمديدها منذ ذلك الحين إلى لغات أخرى مثل Swig أو SQL المضمنة. أيضًا
علاقتها بـ جعل يماثل علاقة C ++ بـ C: إنها تقريبًا 100٪
متوافق مع الإصدارات السابقة ولكنه يضيف عددًا من الميزات الجديدة وطرقًا أفضل للكتابة
com.makefiles.
يجتاز Makepp مجموعة اختبار واسعة النطاق ، ويستخدم في العديد من المشاريع الكبيرة. اذا كنت تمتلك
أي مشكلات تتعلق بأحدث إصدار من CVS ، يا صاح ، وسنحاول إصلاحها بسرعة. Makepp
يعمل مع أي إصدار من Perl منذ 5.8.
تحتوي صفحات الدليل التالية على مزيد من المعلومات حول كيفية استخدام makepp:
البرنامج التعليمي
كيف تكتب makefile. هذا في الغالب مخصص لشخص لديه القليل أو لا
خبرة في استخدام أي تنفيذ للماكينة.
تعليمي التجميع
ماذا تفعل أوامر تجميع يونكس.
ملاحظات عن الإصدار
ما الذي تغير مع كل إصدار.
عدم التوافق
ما الذي يعمل بشكل مختلف بين GNU make و makepp.
تسريع
نصائح مختلفة لجعل makepp يعمل بشكل أسرع.
بيرل بيرفورمانس
نصائح مختلفة لعمل برمجة Perl (داخل ملفات makefiles الخاصة بك وفي أي مكان آخر)
بسرعة.
كتاب الطبخ
إجابات سريعة على "كيف يمكنني ...؟" أو "ما هي أفضل طريقة لـ ...؟"
أسئلة وأجوبة إجابات سريعة على الأسئلة التي عثر عليها الناس بالصدفة.
بناء الخوارزمية
كيف تختلف خوارزمية بناء makepp في نواحٍ أساسية عن الخوارزمية التقليدية.
بناء ذاكرة التخزين المؤقت
ذاكرة التخزين المؤقت للبناء هي دليل يخزن نتائج البنيات السابقة في حال كانت كذلك
مطلوب مرة أخرى في نفس الدليل ، أو في بناء منفصل في دليل مختلف.
بناء طرق التحقق
كيف يقرر makepp متى يبني.
أوامر مدمجة
أوامر قوية وفعالة متاحة في أي مكان makepp 2.0 أو أحدث.
القواعد المضمنة
بالنسبة للبرامج البسيطة جدًا ، قد لا تحتاج إلى ملف makefile على الإطلاق! هذه هي مدمجة
القواعد التي يعرفها makepp.
التوافق
أين وبأي إصدار من Perl makepp يعمل.
تمتد
كيف يمكنك إضافة وظائف إلى makepp عن طريق كتابة كود Perl الخاص بك.
وظائف
وظائف لمعالجة النص ولأغراض أخرى متنوعة.
مستودعات
المستودعات هي تقنية تعمل على تبسيط إنشاءات المتغيرات والحفاظ على مركزية
مجموعة من المصادر.
قوانيـن
تحديد القواعد لبناء الملفات.
رمل
استخدام صناديق الحماية لتقسيم المبنى.
مسح
كيف تفحص makepp التبعيات مثل تضمين الملفات.
التوقيعات
كيف يقرر makepp متى تغيرت الملفات.
المالية
توجيهات إضافية للتحكم في makepp.
المتغيرات
استخدام المتغيرات لتبسيط القواعد.
makepp ، النائب
صيغة سطر الأوامر للأداة الرئيسية.
makeppclean ، mppc
برنامج تنظيف فعال مستقل لإزالة الملفات التي تم إنشاؤها بواسطة makepp.
makeppgraph ، mppg
أداة قائمة بذاتها لتحليل التبعيات بيانياً وأسباب ملف
إعادة بناء.
makeppinfo ، mppi
أداة قائمة بذاتها لتفريغ معلومات البناء بسهولة يتذكر makepp كل منها
ملف.
makepplog ، mppl
أداة قائمة بذاتها لتحليل التبعيات وأسباب إعادة البناء.
makeppreplay ، mppr
أداة قائمة بذاتها لتكرار الأشياء التي قام بها makepp ، ولكن بشكل أسرع.
فهرس
جميع الكلمات الرئيسية والوظائف والمشغلات في makepp.
المميزات
المسح التلقائي لتضمين الملفات
يقوم Makepp بالمسح تلقائيًا لتضمين الملفات. هذا يغني عن الحاجة إلى أدوات مثل
makedepend. يعمل ماسح Makepp حتى إذا لم تكن الملفات المضمنة موجودة بعد ولكن
يجب بناؤها. (هذا صحيح بغض النظر عن المكان الذي أتوا منه على مسار التضمين ،
على عكس البرامج التي تعتمد على خيار "-MM -MG" لدول مجلس التعاون الخليجي.) لدى Makepp نظام مرن
للقيام بهذا الأمر الذي يعتمد على مسح أمر البناء ؛ يمكنك تكييفه من أجل
لغات أخرى أو بناء أوامر بكتابة روتين فرعي لبيرل.
نظام أفضل للبنى الهرمية
يحتوي Makepp على نظام أفضل للتعامل مع الإنشاءات التي تتضمن أدلة متعددة و
ملفات متعددة. الأسلوب التقليدي هو جعل استدعاء نفسه
بشكل متكرر في كل دليل. اعتمادا على مدى تعقيد الترابطات
هي ، في بعض الأحيان هناك حاجة إلى عدة ممرات متكررة. هذا يجعل makefiles جدا
معقدة إذا كانت تضمن البناء الصحيح. المشكلة الحقيقية هي أنه ما لم يكن
التبعيات تافهة (على سبيل المثال ، ملف مكتبة واحد فقط) ، يكاد يكون من المستحيل
التعبير بدقة عن تبعيات الأهداف في ملف واحد من حيث الأهداف من
makefile الآخر. إن صنع يونكس ليس ذكيًا بما يكفي لإدراك أن الهدف في واحد
يعتمد makefile على ملف يمثل هدفًا في makefile ذي المستوى الأدنى ؛ لا يمكن أن تأخذ
بناء أوامر من ملف makefile ذي المستوى الأدنى أثناء محاولته إنشاء الهدف في
makefile المستوى العلوي. لذا فإن الحل المعتاد هو بناء كل ما يمكن أن يكون
تم بناؤه باستخدام ملفات makefiles ذات المستوى الأدنى ، على أمل أن يكون ذلك مناسبًا لبناء كل شيء
هذا مطلوب لملف makefile ذي المستوى الأعلى.
تقوم Makepp بتحميل جميع ملفات makefiles المطلوبة دفعة واحدة ، لذلك ليس لديها مشكلة في التعامل معها
المواقف التي يعتمد فيها ملف من makefile واحد على ملف تم إنتاجه بواسطة ملف
صنع. Makepp cd's تلقائيًا إلى الدليل الذي يحتوي على makefile من قبل
تنفيذ أمر من ملف makefile ، بحيث يمكن كتابة كل ملف makefile بشكل مستقل
دون معرفة دليل البناء ذي المستوى الأعلى. ولكن إذا كان الوصول إلى جذر ملف
شجرة البناء مهمة (على سبيل المثال لأن هذا هو المكان الذي يوجد فيه دليل التضمين الخاص بك) ،
يمكنك تسمية ملف makefile في هذا الدليل خصيصًا. ثم يمنحك makepp الطريق
لهذا الدليل في متغير.
يمكن لـ Makepp أيضًا معرفة مكان وجود جميع ملفات makefiles للمشروع بأكمله
يتم إخبارك ، إذا كان كل ملف makefile موجودًا في نفس الدليل مثل الملفات التي من المفترض أن يكون
ينتج. هذا يمكن أيضا أن يبسط makefiles إلى حد كبير.
لمزيد من التفاصيل حول إنشاء أدلة متعددة ، راجع "تلميحات متعددة
الدلائل "في makepp_cookbook.
أحرف البدل الموثوقة
يمكن لملفات Makefiles استخدام أحرف البدل بشكل موثوق ، لأن بطاقات البدل تتطابق مع أي من الملفات
يوجد، or الملفات التي لم توجد بعد ولكن makepp يعرف كيف يبني. لذلك حتى بالنسبة لـ
برنامج يحتوي على عشرات الوحدات النمطية ، يمكن لملف makefile بأكمله قراءة شيء مثل
هذه:
CXX = g ++
CXXFLAGS = -ز
٪ .o:٪ .c
$ (CXX) $ (CXXFLAGS) -c $ (إدخال) -o $ (إخراج)
my_program: * .o
$ (CXX) $ (المدخلات) -o $ (المخرجات)
وسيعمل هذا حتى لو لم يتم إنشاء أي من ملفات ".o" بعد.
يبني موثوق: يتذكر بناء القيادة
يتتبع Makepp أوامر الإنشاء ، بحيث إذا تغيرت خيارات الترجمة ، فإن الملفات
يتم إعادة بنائها تلقائيًا. هذا مهم لضمان البناء الصحيح. (هذه الفكرة
مأخوذ من أداة "سلبيات" بوب سايدبوتيم ، والتي تم وصفها في لغة بيرل
مجلة في عام 1998 ومتاحة من CPAN.)
لتوضيح سبب أهمية ذلك ، ضع في اعتبارك تعريف الهيكل التالي:
فئة ABC {
int x ؛
#ifndef SPECIAL_OPTION
int ذ ؛
#endif
كثافة العمليات ض ؛
};
لنفترض الآن أنك قررت تشغيل خيار "SPECIAL_OPTION" عن طريق الإضافة
"-DSPECIAL_OPTION" إلى سطر الأوامر. هناك حاجة إلى إعادة تجميع كل شيء ، ولكن
لن يكتشف صنع يونكس التقليدي هذا ، وسيعيد ترجمة ملفات المصدر فقط
التي تغيرت بالفعل. نتيجة لذلك ، سيتم تجميع بعض الوحدات الخاصة بك باستخدام
-DSPECIAL_OPTION ، ولن يفعل الآخرون. بعد جلسة تصحيح محبطة للغاية ، أنت
سوف تكتشف أن كل ما يجب القيام به هو إعادة بناء كل شيء. ثم شئت
اللعنة ، ونأمل أن تتحول إلى تطبيق محسن له ، مثل makepp. في
على الأقل هذا ما فعلته.
كمثال آخر ، افترض أنك تعمل في مشروع جيد
تم تصحيحه ، لذلك عادةً ما يتم تجميعه باستخدام "-O2". أنت الآن تواجه خطأ تحتاجه
للنظر في المصحح. من الصعب فحص التعليمات البرمجية المجمعة مع التحسين
في مصحح الأخطاء ، لذلك تريد إعادة ترجمة التعليمات البرمجية الخاصة بك حتى تتمكن من إلقاء نظرة عليها. لو
تم إعداد makefile لتخزين خيارات المترجم في المتغيرات المعتادة ، يمكنك ذلك
فقط افعل هذا:
makepp CFLAGS = -g CXXFLAGS = -g
وسيعلم makepp أن سطر الأوامر قد تغير لجميع الوحدات. اذا متى
لقد وجدت الخطأ الخاص بك ، اكتب فقط
com.makepp
وسيتم إعادة تجميعها مع التحسين. لا تحتاج إلى كتابة "تنظيف" عندما
قمت بتغيير خيارات البناء.
بعض ملفات makefiles (على سبيل المثال ، تلك الخاصة بنواة Linux) تذهب إلى أطوال لا تصدق لإجبارها
إعادة التحويل البرمجي عندما يتغير أمر الترجمة. مع makepp ، يتم الاعتناء به
تلقائيًا - ليس عليك فعل أي شيء.
تصميمات موثوقة: مطابقة دقيقة للتوقيع
بشكل افتراضي ، لا يضمن makepp فقط أن جميع الأهداف أحدث من الكل
التبعيات. إذا استبدلت تبعية بملف قديم ، فإن makepp يعرف أنه يحتوي على ملف
لإعادة بناء الهدف ، وذلك ببساطة لأن ملف الإدخال قد تغير. هذا شيء آخر
ميزة مهمة لضمان الإنشاءات الصحيحة التي تم أخذها من الأداة المساعدة "السلبيات".
حسابات التوقيع الذكية
بعض التعديلات على ملفات المصدر لا تتطلب بالفعل إعادة بناء. على سبيل المثال ، إذا
قمت فقط بتغيير سطر التعليق ، أو إذا قمت بإعادة إنشاء بعض التعليمات البرمجية ، فلا يوجد شيء معين
سبب لفرض التجميع. بالنسبة إلى تجميع C / C ++ ، يحدد makepp ما إذا كان ملف
يحتاج الملف إلى إعادة التجميع عن طريق حساب مجموع تدقيق تشفير لمحتويات الملف ،
تجاهل التعليقات والمسافات البيضاء ، بدلاً من النظر إلى وقت الملف.
هذا مفيد بشكل خاص إذا كان لديك تضمين الملفات التي تم إنشاؤها بواسطة ملفات
التغيير ، ومع ذلك فإن الملفات التي تم إنشاؤها نادرا ما تتغير. افترض
لديك قواعد yacc نحوية معقدة في برنامجك ، مع قاعدة بناء مثل هذه:
علامة التبويب ytab.c y.tab.h: المحلل اللغوي
yacc -d parser.y
عادة ، في كل مرة تقوم فيها بإجراء تغيير طفيف على "parser.y" ، كل ملف
يعتمد على "y.tab.h" يجب إعادة بنائه منذ أن تغير وقت ملف "y.tab.h".
ومع ذلك ، فإن معظم التغييرات التي تم إجراؤها على "parser.y" لن تؤدي فعليًا إلى تغيير محتويات "y.tab.h"
(ربما باستثناء تعليق) ، لذلك كل إعادة التجميع هذه غير ضرورية.
مستودعات
يمكن لـ Makepp دمج الملفات تلقائيًا من شجرة دليل مختلفة (ملف
"repository") في شجرة البناء الحالية حسب الحاجة. (تم أخذ هذه الفكرة أيضًا من
برنامج "سلبيات".) هذا له عدة استخدامات مثيرة للاهتمام:
المتغير يبني
لنفترض أنك قمت بتجميع برنامجك باستخدام التحسين والتصحيح
عن. الآن يظهر خطأ وعليك إعادة تجميع كل شيء باستخدام التصحيح
ممكن. ومع ذلك ، بمجرد العثور على الخطأ ، ستقوم بإيقاف تشغيل تصحيح الأخطاء و
التحسين مرة أخرى ، ومع معظم البرامج ، سيتعين عليك إعادة تجميع الكل
المصادر مرة أخرى ، حتى تلك التي لم تتغير. سيبدو الإجراء
مثله:
٪ makepp CFLAGS = -O2 # تجميع كل شيء.
عفوًا ، اكتشف الخطأ هنا
٪ makepp CFLAGS = -g # يعيد تجميع كل شيء مرة أخرى.
برنامج gdb my_program
# ... ابحث عن الخطأ
يقوم٪ makepp CFLAGS = -O2 # بإعادة تجميع كل شيء للمرة الثالثة.
باستخدام makepp ، يمكنك ببساطة القرص المضغوط إلى دليل فارغ وتحديد الأصل
الدليل كمستودع. سيؤدي هذا إلى إنشاء ملفات كائن جديدة في منطقة فارغة
الدليل ، مع ترك ملفات الكائن القديمة سليمة. الآن يمكنك العثور على الخطأ
في الدليل المترجم مع التصحيح ، قم بإصلاحه في مصادرك الأصلية ، ثم انتقل
العودة إلى الدليل الأصلي الخاص بك. الآن فقط الملفات القليلة التي قمت بتغييرها بالفعل
بحاجة إلى إعادة تجميعها.
سيبدو الإجراء بأكمله كما يلي:
٪ makepp CFLAGS = -O2 # تجميع كل شيء.
عفوًا ، اكتشف الخطأ هنا
تصحيح أخطاء٪ mkdir
تصحيح٪ cd
٪ makepp -R .. CFLAGS = -g # ترجمة مع تمكين التصحيح ، ولكن
# وضع الكائنات في التصحيح الفرعي.
٪ gdb my_program
# ... ابحث عن الخطأ
٪ cd .. # رجوع إلى الدليل الأصلي.
٪ makepp CFLAGS = -O2 # يعيد تجميع تلك الملفات فقط
# التي قمت بتغييرها.
يمكن أن يكون هذا توفيرًا هائلاً في الوقت المناسب إذا كان هناك العديد من الوحدات.
فريق التطوير مع المصادر المشتركة
افترض أن لديك فريقًا من المطورين يعملون على مجموعة قياسية من المصادر. كل
يقوم المطور بإجراء تغييرات مستقلة ، ولكن لا يحتاج إلى نسخة من
شجرة المصدر بأكملها. باستخدام مستودعات makepp ، يمكنك الحصول على كل مطور
نسخ فقط من الملفات التي قام بتغييرها. سوف Makepp تلقائيا و
إنشاء روابط رمزية مؤقتًا للملفات الأخرى التي لم يتم تغييرها
إلى الملفات المقابلة في المستودع. حتى أنه يمكنه القيام بذلك من أجل الكائن
الملفات الموجودة في المستودع ولا تحتاج إلى إعادة تجميعها في ملف
الدليل الفردي للمطور.
ضمان القواعد الصحيحة
إذا كانت قواعدك تفعل شيئًا لم تخبر به ، فهو المستودع
آلية لا تعرف لجلب تلك الأشياء. لذلك شيء يبني بشكل طبيعي
ولكن الفشل من المستودع يخبرك بإصلاح القواعد الخاصة بك.
الاستدلال التلقائي لملفات ".o" المطلوبة
يمكن لـ Makepp في كثير من الأحيان أن يستنتج بالضبط أي الكائنات ضرورية بالفعل دون أن تكون كذلك
قال صراحة. إذا كنت تستخدم هذه الميزة ، فعندئذ إذا كان أحد ملفات المصدر الخاصة بك يتضمن
"xx.h" ، ويوجد ملف يسمى "xx.o" يعرف makepp كيف يصنعه ، ثم makepp
يضيف "xx.o" إلى سطر أوامر الارتباط. لا أستخدم المكتبات غير المشتركة الآن في الكثير
الأماكن التي اعتدت عليها ، لأن makepp يمكنه تلقائيًا اختيار الوحدات التي أحتاجها.
المعالجة الصحيحة للأسماء المستعارة للأدلة
لن يتم الخلط بين Makepp من خلال الروابط اللينة إلى دليل أو بواسطة قريب مختلف
أسماء الملفات التي تشير إلى نفس الملف. يتم التعرف على جميع مسارات الدليل إلى ملف ،
بما فيها فو, ./foo, ../src/foo, / auto_mnt / somedisk / bob / src / fooو
/ users / bob / src / foo.
أسماء الملفات ذات الأحرف الخاصة
يمكن لـ Makepp دعم أسماء الملفات بنقطتين أو مسافات أو أحرف خاصة أخرى
يسبب مشاكل للطراز التقليدي. ما عليك سوى إحاطة اسم الملف بعلامات اقتباس. (يرى
"الأحرف الخاصة" في makepp_rules للحصول على التفاصيل.)
وظائف الاستبدال النصية الموسعة
يمكن لـ Makepp استخدام إجراءات Perl الفرعية التعسفية لاستبدال النص في makefile.
إذا كنت تعرف لغة Perl ، فأنت غير مقيد على الإطلاق بمجموعة makepp's builtin
وظائف معالجة النصوص.
يمكنك أيضًا كتابة كود Perl في ملف makefile الخاص بك. يمكنك التلاعب بـ Make
المتغيرات مع القوة الكاملة للغة Perl بأكملها. راجع makepp_variables لـ
تفاصيل.
تسجيل قرارات البناء
بشكل افتراضي ، يجعل makepp ملف السجل قابلاً للعرض باستخدام makepplog و mppl الذي يحتوي على ملف
وصف كل ملف حاول إنشاءه ، وما هي القاعدة المستخدمة في إنشائه ، وماذا
كان يعتمد على ، و (إذا تم إعادة بناء الملف) لماذا. يمكن أن يكون هذا مفيدًا للغاية لـ
تصحيح أخطاء ملف makefile - إذا كنت تتساءل لماذا قررت makepp إعادة إنشاء ملف ، أو لماذا
لم يحدث ذلك ، يمكنك فقط البحث في ملف السجل حيث يشرح القرارات.
دعم محسّن للبنيات المتوازية
يدعم Makepp التجميعات المتوازية ، ولكن (على عكس تطبيقات التنفيذ الأخرى)
لن يخلط الإخراج من العمليات المنفصلة التي تعمل في وقت واحد.
مرادفات للمتغيرات المشفرة
يدعم Makepp المرادفات التي يسهل تذكرها لمتغيرات الصنع المشفرة $ @ و $ ^ و
$ <. راجع makepp_variables للحصول على التفاصيل.
استخدم makepp عبر الإنترنت باستخدام خدمات onworks.net