Visual Studio 2008 препроцессор странности - PullRequest
0 голосов
/ 15 ноября 2009

Мы создали простую систему управления версиями для наших сборок, чтобы гарантировать, что встроенные файлы всегда указывают, являются ли они сборками Beta Debug или Beta Release

Я переместил информацию о версии файла в 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 Release Version» вместо «BETA Debug Version». Однако IDE указывает, что «#define FILE_DESC2 _T (« Debug Version »)» будет использоваться. Почему это может быть? Я использовал эти файлы в другом проекте, и они работают правильно.

Спасибо ...

Ответы [ 2 ]

1 голос
/ 16 ноября 2009

Исправлено: в отладочной сборке я добавил _DEBUG к: -

Свойства проекта> Ресурсы> Определения препроцессора. И теперь он работает, как и ожидалось.

0 голосов
/ 15 ноября 2009

Лучший способ «отладить» проблемы препроцессора, подобные этой, - вставить директиву #error в тот момент, когда вы думаете, что ваш макрос фактически получает # define'd

Как только вы узнаете, какой путь на самом деле прошел препроцессор, вы можете попытаться выяснить, почему он это сделал ...

Редактировать: Кроме того, запуск препроцессора для компилятора ресурсов может отличаться от запуска компилятора в отношении того, какие макросы предопределены.

...