visual MSBuild c++ -命令行-可以传递定义

visual MSBuild C++ - command line - can pass defines?

本文关键字:定义 命令行 MSBuild c++ visual      更新时间:2023-10-16

是否有这样的转换方法:

#define ERROR_LOG_LEVEL 5

进入一些msbuild通过命令行将传递给它的项目?

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

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

宏可以通过向编译器传递/D选项来定义。您可以使用ClCompileAdditionalOptions来指定MSBuild中的/D选项:

<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

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