有没有办法转换这样的东西:
#define ERROR_LOG_LEVEL 5
通过命令行将msbuild传递给它的项目?
msbuild.exe {???}ERROR_LOG_LEVEL=5 target
我已经阅读了类似问题的回答,看起来答案是没有,只是想要仔细检查以防某些天才找到解决方法。
答案 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\""