5

我目前正在尝试使用#ifdef标签在 Visual C++ .rc 文件中的几个不同的默认图标之间切换。

正在使用 MSBuild 通过命令行创建切换 #define 值的构建。

我遇到的困难是使用 Visual Studio 2010,为了将预处理器定义传递给资源编译器,您必须在项目设置(配置属性 -> 资源 -> 常规)中定义它。

这使得使用#ifdef标签变得困难,因为使用这种方法,它总是在资源编译器中定义。

我很想将它定义为一个值,以便我使用预处理器#if SOMEVALUE == 4可能会工作,但似乎无法找到通过命令行将预处理器定义 + 值传递给 MSBuild 的方法。

有谁知道将预处理器定义直接传递给资源编译器的方法,或者通过命令行为 msbuild 定义预处理器定义值的方法?

4

3 回答 3

6

是的,这是可以做到的。

尝试使用环境变量将值传递到您的构建过程中。

在您的项目属性中,将 ;$(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

使用此批处理文件,您在命令行上传递的任何内容都将作为预处理器宏传递到构建过程。

于 2011-08-22T18:34:08.343 回答
2

请参阅对此的答案,以及设置 ResourceCompile 选项的附加步骤,即在文本编辑器中编辑您的项目文件以包含如下元素:

<ItemDefinitionGroup>
    <ClCompile>
        <AdditionalOptions>/DERROR_LOG_LEVEL=5 %(AdditionalOptions)</AdditionalOptions>
    </ClCompile>
    <ResourceCompile>
        <AdditionalOptions>/DERROR_LOG_LEVEL=5 %(AdditionalOptions)</AdditionalOptions>
    </ResourceCompile>
</ItemDefinitionGroup>
于 2013-02-15T14:40:33.593 回答
2

我遇到的困难是使用 Visual Studio 2010,为了将预处理器定义传递给资源编译器,您必须在项目设置中定义它(配置属性 -> 资源 -> 常规)。

你得到了困难的部分。只需输入定义为TESTAPPLE=15,它将有效地#define TESTAPPLE 15用于整个项目。

于 2011-08-22T17:36:17.727 回答