VC6リソースを条件付きでコンパイルする方法
-
10-07-2019 - |
質問
環境変数の形式で設定されているコンパイルスイッチ(値はCOMPILE_A
またはCOMPILE_B
)に応じて、アプリケーション名やスプラッシュスクリーンなどのさまざまな設定でアプリケーションをコンパイルします。
ここまで来ました:
-
<!> quot; Project / Settings / C / C ++ / Preprocessor Definitions <!> quot;
$(COMPILESWITCH)
を追加しました(コマンドラインオプション/D "$(COMPILESWITCH)"
の結果)。 -
stdafx.hでは、次のコードを使用できます。これは、コマンドラインパラメーターを使用してプリプロセッサ定義を正しく定義したことを意味します。
#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
しかし、<!> quot; Condition <!> quot; <!> quot; ResourceView / [右クリック] / Properties <!> quot; ... ヘルプテキストには次のように記載されています。
調子の包含を決定する リソース。たとえば、 条件は_DEBUG、このリソース デバッグにのみ含まれます ビルド。
これはエレガントな方法のように見えますよね?
条件として_DEBUG
を指定すると機能します。 /D _DEBUG
は<=>で指定されるので、私の<=>も機能するはずですよね?
何らかの理由でそうではありません。なぜですか?
または私が望むものを達成するための別のより良い方法はありますか?
解決
問題を解決したばかりだと思います...
リソースコンパイラは独自のプリプロセッサを使用します。
したがって、同じプリプロセッサ定義を<!> quot; Project / Settings / Resources / Preprocessor Definitions <!> quot;。
編集:文字列リソース
文字列リソースには<!> quot; condition <!> quotがないため、上記は機能しません。プロパティ...
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