MSBuild C++ - 命令行 - 可以传递定义吗?

Yim*_*ong 7 c++ msbuild macros visual-c++ c-preprocessor

有没有办法转换这样的东西:

#define ERROR_LOG_LEVEL 5
Run Code Online (Sandbox Code Playgroud)

通过命令行将msbuild传递给它的项目?

msbuild.exe {???}ERROR_LOG_LEVEL=5 target
Run Code Online (Sandbox Code Playgroud)

我已经阅读了对类似问题的回答,看起来答案是否定的,只是想仔细检查以防一些天才找到解决方法.

Jam*_*lis 6

可以通过/D选项传递给编译器来定义宏。您可以指定/D使用MSBuild中选择AdditionalOptionsClCompile

<ItemDefinitionGroup>
    <ClCompile>
        <AdditionalOptions>/DERROR_LOG_LEVEL=5 %(AdditionalOptions)</AdditionalOptions>
    </ClCompile>
</ItemDefinitionGroup>
Run Code Online (Sandbox Code Playgroud)

如果您希望能够通过调用msbuild.exe来传递宏的值,则也可以轻松地做到这一点:

<ItemDefinitionGroup Condition="'$(ErrorLogLevel)' != ''">
    <ClCompile>
        <AdditionalOptions>/DERROR_LOG_LEVEL=$(ErrorLogLevel) %(AdditionalOptions)</AdditionalOptions>
    </ClCompile>
</ItemDefinitionGroup>
Run Code Online (Sandbox Code Playgroud)

msbuild.exe的调用方式为:

msbuild /p:ErrorLogLevel=5 MyProject.vcxproj
Run Code Online (Sandbox Code Playgroud)