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 回答