سؤال

لماذا يقوم C++ Builder 6 دائمًا بتجميع كافة الملفات؟

أقوم بإجراء بعض التغييرات على ملف واحد ولكن BCB 6 يجمع كافة الملفات عند بدء تشغيل التطبيق.اي فكرة؟أستخدم نظام التشغيل Windows XP SP2.

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

المحلول

جرب هذا البرنامج المساعد لمترجم BCB:البرنامج المساعد Bcc32Pch IDE

نصائح أخرى

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

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

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

لست على دراية بـ BCB 6 لإعطاء إجابة أكثر دقة.

هل جعلت كل ملفاتك أو الكثير منها تعتمد على وحدة معينة؟

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

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

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

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

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

أصبحت جميع CPPs هذا السطر الأول

#include "all.h"
#pragma hdrstop

الافتراضي كان تضمين "vcl.h"

"all.h" سيتضمن كل الرؤوس المطلوبة في الكل!وحدات.ستتخطى كل وحدة جميع المصادر التي تعتمد على العنوان قبل pragma hdrstop.

مثال:

الوحدة 1. ح

 #include <string>

Unit1.cpp

   #include "all.h"
   #pragma hdrstop

   #include "Unit1.h"

الوحدة 2. ح

 #include <vcl>

Unit2.cpp

   #include "all.h"
   #pragma hdrstop

   #include "Unit2.h"

الكل.ح

   #include <string>
   #include <vcl>

استيراد

  1. لا تستخدم all.h في ملفات الرأس
  2. يمكنك إضافة كافة المتضمنات المستخدمة في رأس المشروع، مثل،
  3. لن يتم تجميع جميع المصادر التي تعتمد على "الرؤوس المترجمة مسبقًا" مرة أخرى!
  4. سيكون إنشاء الرؤوس المترجمة مسبقًا بطيئًا!لذلك قم فقط بإضافة الرؤوس في all.h، والتي لن يتم تغييرها كثيرًا.مثل رؤوس النظام أو رؤوسك التي تم الانتهاء منها بالفعل.
  5. يمكن أن يفشل التجميع.في بعض الأحيان يؤدي ترتيب التضمين إلى "طريق مسدود" للتجميع.إذا حدث ذلك، قم بإلغاء تنشيط "الرؤوس المترجمة مسبقًا".سيتم حل معظم المشكلات إذا كتبت لغة C++ الخاصة بك كما هو الحال في Java:سيصبح كل فصل ملفاته الخاصة (cpp و h).
  6. يُظهر اسم الملف في خيار المشروع "الرؤوس المترجمة مسبقًا" الاسم الأساسي للملفات الحقيقية المترجمة مسبقًا.يمكن للوحدة مشاركة ملف تم تجميعه مسبقًا مع وحدة أخرى، إذا كانت تحتوي (بالضبط) على نفس الإدراجات قبل "pragma hdrstop".يتم الوصول إلى أفضل أداء، إذا كان لديك ملف واحد فقط يحتوي على ملحق رقمي.مثال لأكثر من رأس مترجم مسبقًا:

الوحدة 1. ح

 #include <string>

Unit1.cpp

   #include "all.h"
   #pragma hdrstop

   #include "Unit1.h"

الوحدة 2. ح

 #include <vcl>

Unit2.cpp

   #include <vcl> //!!!!!!!!!!!!!!!!!!! produce a second version of an precompiled file
   #pragma hdrstop

   #include "Unit2.h"

الكل.ح

  #include <string>
  #include <vcl>

تأكد من أنك تستخدم الأمر "make" وليس الأمر "build"، ما لم يكن ذلك مطلوبًا.

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

انظر إلى خيارات الرؤوس المترجمة مسبقًا، والتي قد تساعد في تسريع الأمور.

عندما تحول Borland/CodeGear، بدءًا من C++Builder 2007، إلى نظام MSBuild، أصبحت عمليات التجميع أسرع بكثير وأكثر كفاءة.

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