繁体   English   中英

我可以通过命令行将预处理器定义传递给资源编译器吗?

[英]Can I pass a preprocessor definition to the resource compiler through the command line?

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

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

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

这使得使用#ifdef标签变得困难,因为使用此方法始终会在资源编译器中定义它。

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

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

是的,这可以做到。

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

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

使用此批处理文件,无论您在命令行上传递什么,都将作为预处理器宏传递给构建过程。

查看答案 ,与建立ResourceCompile选项,即编辑您的项目文件在文本编辑器,包括像这样的元素的额外步骤:

<ItemDefinitionGroup>
    <ClCompile>
        <AdditionalOptions>/DERROR_LOG_LEVEL=5 %(AdditionalOptions)</AdditionalOptions>
    </ClCompile>
    <ResourceCompile>
        <AdditionalOptions>/DERROR_LOG_LEVEL=5 %(AdditionalOptions)</AdditionalOptions>
    </ResourceCompile>
</ItemDefinitionGroup>

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

你遇到了困难。 只需将define定义为TESTAPPLE=15 ,它就会有效地为整个项目#define TESTAPPLE 15

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM