2009-11-15 38 views
0

我们已经设置了一个简单的版本系统,我们建立确保内置文件总是表明他们是否是测试版调试或Beta发布版本Visual Studio 2008的预处理器wierdness

我移动的文件版本信息向MYAPP。 RC2和version.h中

// version.h 
    // _DEBUG is defined by VS 

    #define _BETA 

    #ifdef _BETA 
    #define FILE_DESC1 _T("BETA ") 
    #else 
    #define FILE_DESC1 // blank on purpose 
    #endif 

    #ifdef _DEBUG 
    #define FILE_DESC2 _T("Debug Version ") 
    #else 
    #define FILE_DESC2 _T("Release Version ") // this is greyed out in the ide when building 
    #endif 

    #define FILE_DESC FILE_DESC1 FILE_DESC2 


// myapp.rc2 
include "version.h" 

#ifndef _T 
#define _T(x) x 
#endif 

VS_VERSION_INFO VERSIONINFO 
FILEVERSION PROD_VER_MJR,PROD_VER_MIN,PROD_VER_UPD,JOBUILDER_BUILD 
PRODUCTVERSION PROD_VER_MJR,PROD_VER_MIN 
FILEFLAGSMASK 0x3fL 
#ifdef _DEBUG 
FILEFLAGS 0x1L 
#else 
FILEFLAGS 0x0L 
#endif 
FILEOS 0x4L 
FILETYPE 0x1L 
FILESUBTYPE 0x0L 
BEGIN 
    BLOCK "StringFileInfo" 
    BEGIN 
     BLOCK "040904e4" 
     BEGIN 
      VALUE "CompanyName", COMPANY_NAME 
      VALUE "FileDescription", FILE_DESC 
      VALUE "FileVersion", JOBBUI_VERSION 
      VALUE "InternalName", "MyApp.exe" 
      VALUE "LegalCopyright", COPYRIGHT 
      VALUE "OriginalFilename", "MyApp.exe" 
      VALUE "ProductName", PRODUCT_NAME 
      VALUE "ProductVersion", PRODUCT_VERSION 
      VALUE "Comments", COMMENTS 
     END 
    END 
    BLOCK "VarFileInfo" 
    BEGIN 
     VALUE "Translation", 0x409, 1252 
    END 
END 

然而,当EXE是建在调试输出目录中的文件的描述总是错误地说,而不是“BETA发行版本”,“BETA调试版本”然而,IDE表示“创建的#define FILE_DESC2 _T(“Debug Version”)将被使用。为什么会这样呢?我在另一个项目中使用了这些文件,并且它们正常工作。

谢谢你......

回答

1

修正:在调试版本我添加到_DEBUG -

项目属性>资源>预处理器定义。它现在按预期工作。

0

的最好办法“调试”像这样的问题预处理是您认为您的宏实际上是越来越#define'd

点坚持一个#error指令一旦你知道预处理器实际采用了哪条路径,你可以尝试找出它为什么这样做......

编辑:除了预处理器运行资源编译器可能会不同于编译器关于什么宏是预定义的。

+0

您编辑:是正确的。我按照你的建议添加了#error指令,然后得到这个错误“致命错误RC1116:RC在预处理器错误后终止”看起来资源编译器在#error(可能不知道/支持)和我原来的#defines中有问题。我想知道这个问题吗?山姆代码“似乎”在另一个VS2008项目上工作。 – Canacourse 2009-11-15 20:48:31