2

我正在根据我以前的问题创建构建配置。我已经创建了构建配置,并且在一个名为custom.h. 它目前看起来像这样:

#pragma once

#if defined(ELITE_BUILD)
    #define BUILD 3 // 1: personal, 2: select, 3: elite
#elif defined(SELECT_BUILD)
    #define BUILD 2
#elif defined(PERSONAL_BUILD)
    #define BUILD 1
#endif

在我的一个 .rc 文件中,有一个versionconfig.h看起来像这样的包含(有些编辑):

#if BUILD == 1
#define STRDESCRIPTION  "Personal Edition"
#elif BUILD == 2
#define STRDESCRIPTION  "Select Edition"
#elif BUILD == 3
#define STRDESCRIPTION  "Elite Edition"
#pragma message(STRDESCRIPTION)
#endif

我将该#pragma命令添加为日志记录工作。包含之后,.rc 文件的相关部分如下所示(再次,为简洁起见进行了一些编辑):

BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040904b0"
        BEGIN
            VALUE "FileDescription", STRDESCRIPTION
        END
    END
END

当我尝试编译这个项目时,我得到了错误error RC2104 : undefined keyword or key name: STRDESCRIPTION。我有点不知所措。值是存在的,设置后我可以立即记录,没有#undef命令。

-- 已编辑 --

如果我在 if 块之外添加占位符定义,项目将编译,但值没有显示,所以我的问题似乎与条件定义有关。在这一点上最让我困惑的是我可以#pragma message在条件块中放置一个命令并且它被正确执行,但是在那里定义的值是不存在的。希望有人可以为我阐明这一点。

4

1 回答 1

4

我找到了。在 Visual Studio 中,您必须独立于项目为资源文件设置预处理器定义。一旦我添加ELITE_BUILD到资源的预处理器部分,一切都按预期工作。

于 2012-02-15T17:59:32.437 回答