質問

環境変数の形式で設定されているコンパイルスイッチ(値はCOMPILE_AまたはCOMPILE_B)に応じて、アプリケーション名やスプラッシュスクリーンなどのさまざまな設定でアプリケーションをコンパイルします。

ここまで来ました:

  1. <!> quot; Project / Settings / C / C ++ / Preprocessor Definitions <!> quot; $(COMPILESWITCH)を追加しました(コマンドラインオプション/D "$(COMPILESWITCH)"の結果)。

  2. 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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top