views:

488

answers:

2

We have set-up a simple versioning system for our builds to ensure the built files always indicate whether they are Beta Debug or Beta Release builds

I moved the file version info to to myapp.rc2 and created 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

However when the exe is built in the debug output directory the file description always incorrectly says "BETA Release Version" instead of "BETA Debug Version" Yet the IDE indicates that "#define FILE_DESC2 _T("Debug Version ")" would be used. Why might this be? I have used these files on another project and they work correctly.

Thank You...

A: 

The best way to "debug" preprocessor issues like this is to stick a #error directive at the point where you think your macro is actually getting #define'd

Once you know which path the preprocessor actually took, you can try to figure out why it did so...

Edit: Besides the preprocessor run for the resource compiler may differ from the one for the compiler with respect to what macros are predefined.

rep_movsd
You edit: is Correct. I added the #error directive as you suggested and then got this error "fatal error RC1116: RC terminating after preprocessor errors" Looks like the resource compiler is having a problem with #error (maybe not known/supported) and my original #defines. Any way around this I wonder? the sam code 'appears' to be working on another VS2008 project.
Canacourse
A: 

Fixed: on the debug build I added _DEBUG to:-

Project Properties> Resources > Preprocessor Definitions. And its now working as expected.

Canacourse