8

次のようなものを変換する方法はありますか?

#define ERROR_LOG_LEVEL 5

コマンドライン経由で msbuild がそのプロジェクトに渡すものに?

msbuild.exe {???}ERROR_LOG_LEVEL=5 target

同様の質問への回答を読みましたが、答えはノーのようです。天才が回避策を見つけた場合に備えて、再確認したいだけです。

4

2 に答える 2

6

マクロは、/Dオプションをコンパイラに渡すことで定義できます。of/Dを使用して、MSBuild からオプションを指定できます。AdditionalOptionsClCompile

<ItemDefinitionGroup>
    <ClCompile>
        <AdditionalOptions>/DERROR_LOG_LEVEL=5 %(AdditionalOptions)</AdditionalOptions>
    </ClCompile>
</ItemDefinitionGroup>

msbuild.exe への呼び出しを介してマクロの値を渡すことができるようにしたい場合は、それも簡単に行うことができます。

<ItemDefinitionGroup Condition="'$(ErrorLogLevel)' != ''">
    <ClCompile>
        <AdditionalOptions>/DERROR_LOG_LEVEL=$(ErrorLogLevel) %(AdditionalOptions)</AdditionalOptions>
    </ClCompile>
</ItemDefinitionGroup>

msbuild.exe を次のように呼び出します。

msbuild /p:ErrorLogLevel=5 MyProject.vcxproj
于 2013-01-15T16:54:26.923 に答える
0

ここに回答を投稿しましたが、別の回答にコピーします。PropertySheet でユーザー定義マクロを定義する必要があります。次に、ユーザー定義マクロを参照するプリプロセッサを作成します。コードで新しいプリプロセッサ値を使用できるようになりました。最後に、ビルドでは、ユーザー定義マクロの値を/pフラグで変更できます。ここでは、 のようなユーザー定義の値mymacroと のようなプリプロセッサの値を定義しましたVAL。これで、プロジェクトを簡単にコンパイルできます/p:mymacro="\"some thing new\""

#include <iostream>


int main() {
    std::cout << VAL << std::endl;

    getchar();
}

yourproject.vcxproj:

<ClCompile>
  ...
  <PreprocessorDefinitions>VAL=$(mymacro);%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>

msbuild yourproject.vcxproj /p:mymacro="\"some thing new\""

于 2019-04-07T12:45:50.597 に答える