MSBuild的C ++ - 命令行 - 可以通过定义?(MSBuild C++ - comman

2019-08-06 23:06发布

有没有一种方法来转换的东西是这样的:

#define ERROR_LOG_LEVEL 5

到的东西,通过命令行的MSBuild将传递给它的项目?

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

我读过类似的问题的答复,它看起来像答案没有 ,只是想被仔细检查的情况下,一些天才已经找到了解决办法。

Answer 1:

宏可以通过使被定义的/D选项给编译器。 您可以指定/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


Answer 2:

我已经张贴在答案在这里 ,但我复制了另一个答案。 你需要在的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\""



文章来源: MSBuild C++ - command line - can pass defines?