Le compilateur de ressources traite parfaitement les définitions d'inclusions et de préprocesseurs. Cela ne fonctionne pas bien avec Windows.h par exemple. Mais je ne peux pas penser à bonne raison pour laquelle vous auriez besoin de cela dans un fichier qui est consommé par le compilateur de ressources. Utilisez simplement un fichier d'en-tête qui n'inclut aucun élément causant l'avertissement, et définissez simplement ce dont vous avez besoin. A titre d'exemple, le versioning typique que nous utilisons ici ce fait et fonctionne très bien: il y a un fichier maître unique .rc avec qui ressemble à quelque chose comme ceci:
#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
A partir de là les possibilités sont à peu près illimitée. Soit VRC_INCLUDE
définir au chemin d'accès complet d'un fichier d'inclusion contenant toutes les définitions VRC_...
:
rc /d VRC_INCLUDE=$(VersionMainInclude) ... version.rc
ou de fournir toutes les définitions
rc /d VRC_COMPANYNAME=mycompany ... version.rc
ou une combinaison des deux.
Pour vous montrer les possibilités, voici ce que je fais actuellement pour tous les projets versionnés avec git:
- chaque projet a un #defining version.h juste un court VRC_FILEDESCRIPTION et VRC_FILEVERSION
- il y a un maître version.h #defining VRC_COMPANYNAME/VRC_COPYRIGHT/...
- le projet comprend un fichier .targets qui crée un version.res dans un événement prebuild
l'événement prebuild msbuild prend soin des choses intéressantes: i t crée un nouveau fichier d'en-tête temporaire combinant les deux autres, prend le SHA court git et les données actuelles et ajoute que la chaîne de description du fichier pour qu'il finit par ressembler à
Foo Dll [12e454re 30/07/2013]
Vous avez raison, J'ai manqué que la version.h comprenait un autre .h qui ouvrait la boîte pandora. – sorin