リソース コンパイラは、インクルードとプリプロセッサの定義を適切に処理します。たとえば、Windows.h をインクルードするとうまく処理できません。しかし、リソース コンパイラによって消費されるファイルでそれが必要になる正当な理由は思いつきません。警告の原因となるものを含まないヘッダー ファイルを使用し、必要なものを定義するだけです。例として、ここで使用する典型的なバージョン管理はこれを行い、うまく機能します。次のような単一のマスター .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 でバージョン管理されたすべてのプロジェクトに対して私が現在行っていることを以下に示します。