有没有一种方法可以将这样的内容转换为:
#define ERROR_LOG_LEVEL 5
如何将其转换为msbuild通过命令行传递给其项目的内容?
msbuild.exe {???}ERROR_LOG_LEVEL=5 target
我已经阅读了类似问题的答案,看起来答案是否定的,只是想再次确认以防有天才找到了解决方法。
有没有一种方法可以将这样的内容转换为:
#define ERROR_LOG_LEVEL 5
如何将其转换为msbuild通过命令行传递给其项目的内容?
msbuild.exe {???}ERROR_LOG_LEVEL=5 target
我已经阅读了类似问题的答案,看起来答案是否定的,只是想再次确认以防有天才找到了解决方法。
通过向编译器传递 /D
选项,可以定义宏。您可以使用ClCompile
的AdditionalOptions
从MSBuild指定/D
选项:
<ItemDefinitionGroup>
<ClCompile>
<AdditionalOptions>/DERROR_LOG_LEVEL=5 %(AdditionalOptions)</AdditionalOptions>
</ClCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(ErrorLogLevel)' != ''">
<ClCompile>
<AdditionalOptions>/DERROR_LOG_LEVEL=$(ErrorLogLevel) %(AdditionalOptions)</AdditionalOptions>
</ClCompile>
</ItemDefinitionGroup>
使用 msbuild.exe 调用:
msbuild /p:ErrorLogLevel=5 MyProject.vcxproj
/D
选项传递给编译器的C++宏ERROR_LOG_LEVEL
。但是,您不需要使用IDE:您可以使用任何文本编辑器编辑项目文件和目标/道具文件。 - James McNellismsbuild /p:ErrorLogLevel=5 MyProject.vcxproj
需要在 MSVC 中打开项目或对 MyProject.vcxproj 文件进行任何修改吗? - Yimin Rongmsbuild /p:ERROR_LOG_LEVEL=5 MyProject.vcxproj
- Giuseppe Salvatore我在这里发布了一个答案,但我将其复制到另一个答案中。您需要在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="\"一些新的东西\""