سؤال

اعتمادا على تجميع التبديل (القيم COMPILE_A أو COMPILE_B) في شكل envorinment متغير, أريد تجميع طلبي مع إعدادات مختلفة ، مثل اسم التطبيق و شاشة البداية.

حصلت على هذا حتى الآن:

  1. في "مشروع / إعدادات / C/C++ / المعالج التعاريف" أضفت $(COMPILESWITCH) (النتائج في خيار سطر الأوامر /D "$(COMPILESWITCH)").

  2. في stdafx.ح يمكنني استخدام التعليمات البرمجية التالية مما يعني أنني بشكل صحيح تعريف المعالج التعريف عن طريق سطر الأوامر المعلمة:


    #if defined COMPILE_A
    #   define IDB_SPLASH IDB_SPLASH_A
    # elif defined COMPILE_B
    #   define IDB_SPLASH IDB_SPLASH_B
    # else
    #   error Unknown or undefined target compile switch; cannot compile!
    # endif

لكني لاحظت أن "الشرط" المنشأة بموجب "ResourceView / [انقر بزر الماوس الأيمن فوق] / خصائص"...مساعدة النص يقول هذا:

الشرط

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

هذا يبدو مثل أنيقة طريقة للقيام بذلك, صحيح ؟

Specifiying _DEBUG كما يعمل الشرط.حتى _DEBUG يتم تحديد عن طريق /D _DEBUG بلدي $(COMPILESWITCH) ينبغي أيضا العمل, أليس كذلك ؟
لسبب ما ليس كذلك ؛ لماذا ؟

أو هناك حتى آخر, طريقة أفضل لتحقيق ما أريد ؟

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

المحلول

أعتقد أنا فقط حل مشكلتي...

الموارد مترجم يستخدم المعالج.
ولذلك نفس المعالج تعريف يجب أن يكون تحت وأضاف "المشروع / إعدادات / الموارد / المعالج التعاريف".

تحرير:سلسلة الموارد

المذكورة أعلاه لا تعمل سلسلة الموارد كما أنها لا تملك "شرط" الإقامة...

اخترت لاستخدام res\<projectname>.rc2 مخصص ملف الموارد التي لا يكون لمست من قبل محرر الموارد.المحتوى يبدو مثل هذا

#if defined(COMPILE_A)
    STRINGTABLE DISCARDABLE 
    BEGIN
        IDR_MAINFRAME           "AppTitle A"
    END
#else
#   if defined(COMPILE_B)
    STRINGTABLE DISCARDABLE 
    BEGIN
        IDR_MAINFRAME           "AppTitle B"
    END
#   else
#       error Compile switch not defined or unknown; cannot compile!
#   endif
#endif
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top