سؤال

ما هو أفضل المرشحين لملف الرأس المترجم مسبقًا؟هل يمكنني وضع رؤوس STL وBoost هناك، على الرغم من أنها تحتوي على قوالب؟وهل سيؤدي ذلك إلى تقليل أوقات الترجمة؟وأيضًا، ما هي أفضل إعدادات IDE لتقليل أوقات الترجمة؟

هل كانت مفيدة؟

المحلول

الجواب السريع:تنتمي رؤوس STL وBoost بالفعل إلى ملف الرأس المترجم مسبقًا، على الرغم من أن ملفات الرأس هذه تحدد فئات القالب.

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

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


(إضافة لاحقة)

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

السبب هو أن إنشاء الرأس المترجم مسبقًا يمكن أن يستغرق وقتًا طويلاً، لأن مكتبات Boost وSTL وWindows كبيرة جدًا.

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

نصائح أخرى

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

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

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top