كيفية مشروط تجميع الموارد VC6
-
10-07-2019 - |
سؤال
اعتمادا على تجميع التبديل (القيم COMPILE_A
أو COMPILE_B
) في شكل envorinment متغير, أريد تجميع طلبي مع إعدادات مختلفة ، مثل اسم التطبيق و شاشة البداية.
حصلت على هذا حتى الآن:
في "مشروع / إعدادات / C/C++ / المعالج التعاريف" أضفت
$(COMPILESWITCH)
(النتائج في خيار سطر الأوامر/D "$(COMPILESWITCH)"
).في 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