【问题标题】:Can I pass a preprocessor definition to the resource compiler through the command line?我可以通过命令行将预处理器定义传递给资源编译器吗?
【发布时间】:2011-11-01 06:00:25
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: c++ visual-studio-2010 msbuild c-preprocessor rc


    【解决方案1】:

    是的,这是可以做到的。

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

        • 不幸的是,传递给项目编译器的#define 值不会传递给资源编译器。即,在编译项目时 /D "TESTAPPLE=15" 将 TESTAPPLE 的值设置为 15。然而,在资源编译器中,TESTAPPLE 只是被定义,但没有值 15。
        • 呵呵,看来我还没有玩够资源编译器。 cmake.org/pipermail/cmake/2011-January/042093.html 暗示它可以工作 /d "CMAKE_INTDIR=\"Release\"",但不是权威来源。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-12
        • 2014-03-30
        • 1970-01-01
        • 1970-01-01
        • 2015-07-30
        相关资源
        最近更新 更多