5

#ifdef現在、タグ を使用して、Visual C++ .rc ファイル内のいくつかの異なる既定のアイコンを切り替えようとしています。

#define 値を切り替えるビルドは、MSBuild を使用してコマンド ラインから作成されています。

私が直面している問題は、Visual Studio 2010 を使用してプリプロセッサ定義をリソース コンパイラに渡すために、プロジェクト設定 (Config Properties -> Resources -> General) で定義する必要があることです。

#ifdefこのメソッドを使用すると、タグは常にリソース コンパイラで定義されるため 、タグの使用が困難になります。

プリプロセッサを使用して機能するように、値に定義したいと思いますが#if SOMEVALUE == 4、コマンド ライン経由でプリプロセッサ定義 + 値を MSBuild に渡す方法が見つからないようです。

プリプロセッサ定義をリソース コンパイラに直接渡す方法、または msbuild のコマンドライン経由でプリプロセッサ定義の値を定義する方法を知っている人はいますか?

4

3 に答える 3

6

はい、これは可能です。

環境変数を使用してビルド プロセスに値を渡してみてください。

プロジェクト プロパティで、リソース プリプロセッサ定義の末尾に ;$(CMDLINE_DEFINES) を追加します。(必ず正しい構成を選択してください。)

次に、コマンド ライン タイプから MSBuild を使用する (またはバッチ ファイルに追加する) と...

C:\Projects\SomeProject> set CMDLINE_DEFINES=SOMETEST=42
C:\Projects\SomeProject> MSBuild SomeProject.vcproj

バッチ ファイルは次のようになります。

@echo off
SET CMDLINE_DEFINES=%1
MSBUILD SomeProject.vcproj

このバッチ ファイルを使用すると、コマンドラインで渡すものはすべて、プリプロセッサ マクロとしてビルド プロセスに渡されます。

于 2011-08-22T18:34:08.343 に答える
2

The difficulty I have been running into is that using Visual Studio 2010, in order to pass a preprocessor definition to the resource compiler you must define it in the project settings (Config Properties -> Resources -> General).

You got the hard part. Just enter the define as TESTAPPLE=15 and it will effectively #define TESTAPPLE 15 for the entire project.

于 2011-08-22T17:36:17.727 に答える
2

これに対する回答を参照してください。ResourceCompile オプションを設定する追加の手順があります。つまり、テキスト エディターでプロジェクト ファイルを編集して、次のような要素を含めます。

<ItemDefinitionGroup>
    <ClCompile>
        <AdditionalOptions>/DERROR_LOG_LEVEL=5 %(AdditionalOptions)</AdditionalOptions>
    </ClCompile>
    <ResourceCompile>
        <AdditionalOptions>/DERROR_LOG_LEVEL=5 %(AdditionalOptions)</AdditionalOptions>
    </ResourceCompile>
</ItemDefinitionGroup>
于 2013-02-15T14:40:33.593 に答える