我目前正在尝试使用#ifdef
标记在Visual C ++ .rc文件中切换几个不同的默认图标。
使用MSBuild通过命令行创建切换#define值的构建。
我遇到的困难是使用Visual Studio 2010,为了将预处理器定义传递给资源编译器,您必须在项目设置中定义它(Config Properties - > Resources - > General)。 / p>
这使得使用#ifdef
标记变得困难,因为使用此方法始终会在资源编译器中定义它。
我希望将它定义为一个值,以便我可以使用预处理器#if SOMEVALUE == 4
可能有效,但似乎找不到通过命令行将预处理器定义+值传递给MSBuild的方法。 / p>
有没有人知道将预处理器定义直接传递给资源编译器的方法,或者通过命令行为msbuild定义预处理器定义的值的方法?
答案 0 :(得分:5)
是的,这可以做到。
尝试使用环境变量将值传递到构建过程中。
在项目属性中,将$(CMDLINE_DEFINES)添加到资源预处理器定义的末尾。 (务必选择正确的配置。)
然后从命令行类型使用MSBuild(或添加到批处理文件)...
C:\Projects\SomeProject> set CMDLINE_DEFINES=SOMETEST=42
C:\Projects\SomeProject> MSBuild SomeProject.vcproj
批处理文件可能如下所示:
@echo off
SET CMDLINE_DEFINES=%1
MSBUILD SomeProject.vcproj
使用此批处理文件,无论您在命令行上传递什么,都将作为预处理器宏传递给构建过程。
答案 1 :(得分:1)
我遇到的困难是使用Visual Studio 2010,为了将预处理器定义传递给资源编译器,您必须在项目设置中定义它(Config Properties - > Resources - > General)。 / p>
你遇到了困难。只需输入定义为TESTAPPLE=15
,它就会有效#define TESTAPPLE 15
整个项目。
答案 2 :(得分:1)
请参阅this的答案,以及设置ResourceCompile选项的附加步骤,即在文本编辑器中编辑项目文件以包含以下元素:
<ItemDefinitionGroup>
<ClCompile>
<AdditionalOptions>/DERROR_LOG_LEVEL=5 %(AdditionalOptions)</AdditionalOptions>
</ClCompile>
<ResourceCompile>
<AdditionalOptions>/DERROR_LOG_LEVEL=5 %(AdditionalOptions)</AdditionalOptions>
</ResourceCompile>
</ItemDefinitionGroup>