有没有一种方法来转换的东西是这样的:
#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
选项给编译器。 您可以指定/D
MSBuild中使用选项AdditionalOptions
的ClCompile
:
<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\""