Visual studio 2008 Visual Studio 2008预处理器wierdness
我们已经为我们的构建建立了一个简单的版本控制系统,以确保构建文件始终指示它们是Beta调试版本还是Beta发布版本 我将文件版本信息移动到myapp.rc2并创建了version.hVisual studio 2008 Visual Studio 2008预处理器wierdness,visual-studio-2008,preprocessor,Visual Studio 2008,Preprocessor,我们已经为我们的构建建立了一个简单的版本控制系统,以确保构建文件始终指示它们是Beta调试版本还是Beta发布版本 我将文件版本信息移动到myapp.rc2并创建了version.h // version.h // _DEBUG is defined by VS #define _BETA #ifdef _BETA #define FILE_DESC1 _T("BETA ") #else #define FILE_DESC1 /
// 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”(“调试版本”)。为什么会这样?我在另一个项目中使用了这些文件,它们工作正常
谢谢……对这样的预处理器问题进行“调试”的最佳方法是在您认为宏实际得到“定义”的位置粘贴“错误”指令
一旦你知道了预处理器的实际路径,你可以试着找出它为什么会这样做
编辑:此外,资源编译器运行的预处理器可能与编译器运行的预处理器在预定义宏方面有所不同 修复:在调试版本中,我添加了_debug到:-
项目属性>资源>预处理器定义。现在它可以正常工作了。您编辑的:是正确的。我按照您的建议添加了#error指令,然后得到了这个错误“致命错误RC1116:RC在预处理器错误后终止”,看起来资源编译器在#error(可能不知道/不支持)和我的原始#定义方面有问题。我想知道有什么办法可以解决这个问题吗?sam代码“似乎”正在处理另一个VS2008项目。