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

时间:2013-01-15 16:42:49

标签: c++ visual-c++ msbuild macros c-preprocessor

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

#define ERROR_LOG_LEVEL 5

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

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

我已经阅读了类似问题的回答,看起来答案是没有,只是想要仔细检查以防某些天才找到解决方法。

2 个答案:

答案 0 :(得分:4)

可以通过将the /D option传递给编译器来定义宏。您可以使用/D的{​​{1}}从MSBuild指定AdditionalOptions选项:

ClCompile

如果您希望能够通过调用msbuild.exe来传递宏的值,您也可以轻松地执行此操作:

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

答案 1 :(得分:0)

我在here中发布了答案,但我将其复制为另一个答案。您需要在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\""