资源编译器可以很好地处理包含和预处理器定义。例如,它不能很好地处理包括 Windows.h 的问题。但是我想不出 任何 充分的理由为什么您需要在资源编译器使用的文件中使用它。只需使用不包含导致警告的任何内容的头文件,然后定义您需要的内容。例如,我们在这里使用的典型版本控制可以做到这一点并且效果很好:有一个 single 主 .rc 文件,它看起来像这样:
#include <winver.h>
#define stringize( x ) stringizei( x )
#define stringizei( x ) #x
#ifdef VRC_INCLUDE
#include stringize( VRC_INCLUDE )
#endif
#ifdef _WIN32
LANGUAGE 0x9,0x1
#pragma code_page( 1252 )
#endif
1 VERSIONINFO
FILEVERSION VRC_FILEVERSION
PRODUCTVERSION VRC_PRODUCTVERSION
FILEFLAGSMASK 0x1L
FILEFLAGS VS_FF_DEBUG
FILEOS VOS__WINDOWS32
FILETYPE VRC_FILETYPE
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904E4"
BEGIN
VALUE "CompanyName", stringize( VRC_COMPANYNAME )
VALUE "FileDescription", stringize( VRC_FILEDESCRIPTION )
VALUE "FileVersion", stringize( VRC_FILEVERSION )
VALUE "LegalCopyright", stringize( VRC_COPYRIGHT )
VALUE "InternalName", stringize( VRC_ORIGINALFILENAME )
VALUE "OriginalFilename", stringize( VRC_ORIGINALFILENAME )
VALUE "ProductName", stringize( VRC_PRODUCTNAME )
VALUE "ProductVersion", stringize( VRC_PRODUCTVERSION )
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1200
END
END
从这里开始,可能性几乎是无限的。将VRC_INCLUDE 定义为包含所有VRC_... 定义的包含文件的完整路径:
rc /d VRC_INCLUDE=$(VersionMainInclude) ... version.rc
或提供所有定义
rc /d VRC_COMPANYNAME=mycompany ... version.rc
或两者兼而有之。
为了向您展示可能性,以下是我目前对所有使用 git 版本的项目所做的: