هذا هو الأمر makepp_build_algorithm الذي يمكن تشغيله في مزود الاستضافة المجاني OnWorks باستخدام إحدى محطات العمل المجانية المتعددة على الإنترنت مثل Ubuntu Online أو Fedora Online أو محاكي Windows عبر الإنترنت أو محاكي MAC OS عبر الإنترنت
برنامج:
اسم
makepp_build_algorithm - كيفية تنفيذ makepp لملف makefile
الوصف
تختلف المكونات الداخلية لـ Makepp عن نظام Unix القياسي من نواحٍ أساسية. هذه الصفحة
يصف الفلسفة المختلفة بالتفصيل.
عكس مقابل إلى الأمام الإستنباط
يعمل Makepp في الاتجاه المعاكس من طراز Unix القياسي. صنع يونكس التقليدي
يُعطى هدفًا للبناء ، ثم يجد قاعدة تطابق الأحرف الموجودة في
اسم الملف الهدف. إذا كان الهدف أقدم من أي من تبعيات القاعدة ، فهو إذن
أعيد بناؤه.
على سبيل المثال ، ضع في اعتبارك قاعدة النمط هذه:
٪ .o:٪ .cxx
$ (CXX) $ (CXXFLAGS) -c $ (إدخال) -o $ (إخراج)
عندما يدرك make أنه يحتاج إلى إنشاء ملف يسمى "xyz.o" ، فإنه يبحث في قائمة ملفات
قواعد النمط حتى ترى أن "xyz.o" يطابق النمط "٪ .o" ، ثم يتم تطبيقه
هذه القاعدة.
Makepp يعمل في الاتجاه المعاكس. يقوم أولاً بحساب جميع الملفات التي يمكنه ذلك
بناء من خلال تطبيق القواعد التي تطابق الأحرف في أسماء ملفات التبعية. اذا متى
يحتاج إلى إنشاء ملف ، فهو يبحث ببساطة لمعرفة ما إذا كان أحد الملفات التي يعرفها
كيف تقوم بالبناء. يتم تخزين قائمة الملفات المعروفة بناءً على اسم الملف المطلق.
عندما يواجه makepp قاعدة النمط أعلاه ، فإنه يبحث عن جميع الملفات في الدليل
مطابقة النمط "٪ .cxx" (على سبيل المثال ، "* .cxx"). ثم يتذكر كل ملف من هذه الملفات
أنه يمكن أن ينتج ملف ".o" المقابل. إذا makepp في وقت لاحق يكتشف ذلك
يمكن إنشاء ملف ".cxx" آخر غير موجود حاليًا ، سيتم تطبيق هذه القاعدة أيضًا
وسيتم تمييز ملف ".o" المقابل.
قد يبدو هذا غير فعال إلى حد ما ، لكن اتضح أنه ليس بطيئًا في معظم الحالات ،
وغالبًا ما يكون صحيحًا أن جميع الملفات التي يمكن إنشاؤها تقريبًا قد تم إنشاؤها في الواقع.
ومعرفة القائمة الكاملة للملفات التي يمكن بناؤها لها عدة مزايا:
يمكن أن تطابق أحرف البدل الملفات التي لم توجد بعد ولكن يمكن بناؤها.
· ملفات الرأس التي تم الكشف عنها بواسطة الماسح التلقائي للتبعية لا تملك
أن تكون موجود؛ makepp يعرف أين سيكونون. (معظم الحلول الأخرى لهذه المشكلة
افترض أن أي رؤوس غير موجودة حتى الآن موجودة في الدليل الحالي.)
المستودعات أبسط بكثير في التنفيذ لأن makepp يعرف مسبقا ما هي الملفات
يستطيع جعل. (راجع makepp_repositories للحصول على التفاصيل.)
· من الممكن تحديد الملفات التي يمكن بناؤها بسهولة (انظر ملف
وظيفة "$ (only_targets)".
تم تبسيط وظيفة Makepp $ (infer_objects) إلى حد كبير من خلال معرفة ما هي الكائنات
متاح.
ملفات مقابل نصي أنماط
يشترك Makepp في إنشاء أوامر مع ملف هدف ، وليس بنمط نصي لملف
اسم الملف. لذلك لا يتم الخلط بينه وبين الأسماء المختلفة لنفس الملف. وهكذا ، ل
على سبيل المثال ، سيعرف makepp أن "./xyz" و "xyz" هما نفس الملف ، بينما
المرافق قد لا.
هذا مهم بشكل خاص لأنه (على عكس الطراز القياسي) يقوم makepp بتحميل ملفات makefiles
من أدلة مختلفة. لكي تكون ملفات makefiles مستقلة نسبيًا ، مع
لم يتم إعطاء موضع خاص لملف makefile ذي المستوى الأعلى ، فكل ملف makefile يشير إلى جميع الملفات
نسبة إلى الدليل الخاص بها. وبالتالي إذا قمت بتحميل makefile من الدليل الفرعي
"other_stuff" ، وهذا makefile يشير إلى "../xyz" ، سوف يدرك makepp مرة أخرى أنه
نفس الملف المشار إليه أعلاه. (كما أنه لن يتم الخلط بينه وبين الدليل المرتبط بالنظام
أسماء.)
تخزين نساعدك في بناء معلومات
يقوم Makepp بتخزين المزيد من المعلومات حول كل ملف يقوم بإنشائه بعد التاريخ فقط
ختم (وهو كل ما يهتم به المعيار). تتضمن هذه المعلومات:
· توقيع هذا الملف على آخر بناء ، حتى نعرف ما إذا كان الملف نفسه به
تغيرت.
· أسماء كل ملف تبعية ، بما في ذلك الملفات والملفات الأخرى المستنتجة
تلقائيا. إذا تغيرت هذه القائمة ، فإن makepp يفترض أنها بحاجة إلى إعادة البناء.
· توقيع كل تبعية. بهذه الطريقة ، يعرف makepp إعادة البناء ليس فقط عندما يكون ملف
التبعيات أحدث من الهدف ، ولكن عندما تتغير على الإطلاق. هذا أيضا يجعل
من الممكن استخدام أنواع أخرى من التوقيعات ، مثل المجاميع الاختبارية للتشفير ، بدلاً من ذلك
من تاريخ الملف.
· أمر البناء بأكمله (و cwd الخاص به). بهذه الطريقة إذا قمت بتغيير أمر البناء
(على سبيل المثال ، قم بتغيير خيارات المترجم) ، يعرف makepp إعادة البناء حتى لو كانت الملفات
أنفسهم لم يتغيروا.
· العمارة. إذا قمت بتجميع برنامجك على Linux ثم قم بالتبديل إلى
Solaris ، makepp يعرف تلقائيًا إعادة تجميع كل شيء.
يقوم Makepp بإنشاء دليل فرعي في كل دليل يلامسه يسمى ".makepp". ال
بناء معلومات لملف اسم الملف في الدليل المخزن في .makepp / اسم الملف. إذا
إذا قمت بحذف هذا الدليل الفرعي أو تغيير الملفات ، فسيقوم makepp بإعادة إنشاء جميع الملفات المتأثرة.
ضمني جار التحميل
إذا كان makepp يحاول إنشاء هدف في دليل وليس لديه قاعدة له حتى الآن ،
أو إذا كانت تبحث عن ملفات تطابق حرف بدل في دليل ، فستبحث في ذلك
دليل لمعرفة ما إذا كان makefile موجودًا. إذا كان الأمر كذلك ، فسيتم تحميل ملف makefile
تلقائيا.
هذا يعني أنه لا يتعين عليك عادةً إخبار makepp صراحة بمكان العثور عليه
makefiles - كل ما عليك فعله هو الرجوع إلى ملف في دليل آخر ، وسوف يقوم makepp
معرفة كيفية بنائه تلقائيًا.
سيحدث التحميل الضمني فقط إذا كان الدليل قابلاً للكتابة لك. وبالتالي إذا كنت تريد
منع makepp من محاولة بناء مجموعة من الأشياء التي لا تتغير أبدًا ، ما عليك سوى إجراء
الدليل للقراءة فقط.
لن يحدث التحميل الضمني إذا كنت في شجرة تحت ملف ملف RootMakepp (.mk) و
makefile الآخر خارج تلك الشجرة. إذا كنت تريد هذا مرة واحدة ، يمكنك إعطاء ملف
"--do-build = /" خيار makepp لجعل كل شيء خارج الشجرة قابلاً للبناء. اذا أنت
تريد ذلك دائمًا ، يمكنك وضع عبارة "load_makefile" في مكان ما داخل الشجرة
قم بتوصيله بشكل صريح بالشجرة.
إذا كان التحميل الضمني يعيق طريقك (على سبيل المثال ، يقوم makepp بتحميل الكثير من ملفات makefiles ويضيع
الوقت ، وإلا فلن ترغب حقًا في محاولة إعادة بناء جميع العناصر الموضحة في
makefiles) ، يمكنك إيقاف تشغيله لجميع الدلائل باستخدام الأمر "--noimplicit_load"
خيار سطر ، أو يمكنك إيقاف تشغيله للأدلة المحددة باستخدام "no_implicit_load"
بيان في makefile الخاص بك.
استخدم makepp_build_algorithm عبر الإنترنت باستخدام خدمات onworks.net