MSBuild C++ - 命令行 - 是否可以传递宏定义?

9

有没有一种方法可以将这样的内容转换为:

#define ERROR_LOG_LEVEL 5

如何将其转换为msbuild通过命令行传递给其项目的内容?

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

我已经阅读了类似问题的答案,看起来答案是否定的,只是想再次确认以防有天才找到了解决方法。


1
我应该补充一点:有没有一种方法可以在不修改项目或解决方案文件的情况下完成上述操作? - Yimin Rong
2
答案毕竟是是的,请参见https://dev59.com/5GUp5IYBdhLWcg3wo4ud#17446623 - stijn
2个回答

7

通过向编译器传递 /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

是的,您需要修改项目文件以传播MSBuild属性“$(ErrorLogLevel)”的值到通过/D选项传递给编译器的C++宏ERROR_LOG_LEVEL。但是,您不需要使用IDE:您可以使用任何文本编辑器编辑项目文件和目标/道具文件。 - James McNellis
谢谢。方法 msbuild /p:ErrorLogLevel=5 MyProject.vcxproj 需要在 MSVC 中打开项目或对 MyProject.vcxproj 文件进行任何修改吗? - Yimin Rong
好的。我没有编辑proj文件的选项。只读。 - Yimin Rong
您可以创建自己的项目文件,其中包括只读项目文件并指定其他选项,假设只读项目文件不会执行任何可怕的操作,例如重置ClCompile.AdditionalOptions。 - James McNellis
我会将您的答案标记为已接受,但是针对我的特定情况,答案基本上是“不行”。感谢您的帮助。 - Yimin Rong
抱歉,只是确认一下:难道没有一种方法可以在不更改项目文件的情况下从命令行传递预处理器定义吗?例如 msbuild /p:ERROR_LOG_LEVEL=5 MyProject.vcxproj - Giuseppe Salvatore

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

msbuild yourproject.vcxproj /p:mymacro="\"一些新的东西\""


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接