我正在尝试设置程序的版本控制,以便我可以在每次构建时增加它,但是在设置 .exe
的版本时遇到了一些问题。 .
这是我的 BuildVersion.h
#define STRINGIZE(s) #s
#define VER_MAJOR_VERSION 6
#define VER_MINOR_VERSION 7
#define VER_HOTFIX_VERSION 0
#define VER_BUILD_NUMBER 999
#define VER_FILE_VERSION VER_MAJOR_VERSION, VER_MINOR_VERSION, VER_HOTFIX_VERSION, VER_BUILD_NUMBER
#define VER_FILE_VERSION_STR STRINGIZE(VER_MAJOR_VERSION) \
"." STRINGIZE(VER_MINOR_VERSION) \
"." STRINGIZE(VER_HOTFIX_VERSION) \
"." STRINGIZE(VER_BUILD_NUMBER) \
#define VER_PRODUCT_VERSION VER_FILE_VERSION
#define VER_PRODUCT_VERSION_STR VER_FILE_VERSION_STR
这是我的 .rc
的版本部分文件
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION VER_FILE_VERSION
PRODUCTVERSION VER_PRODUCT_VERSION
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x0L
FILETYPE 0x1L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "CompanyName", "My Company"
VALUE "FileDescription", "My Description"
VALUE "FileVersion", VER_FILE_VERSION_STR "\0"
VALUE "InternalName", "MyProgram.exe"
VALUE "LegalCopyright", "© 2019 My copyright"
VALUE "OriginalFilename", "MyProgram.exe"
VALUE "ProductName", "My Program"
VALUE "ProductVersion", VER_PRODUCT_VERSION_STR "\0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1200
END
END
但这就是我的 .exe
中显示的内容属性
如您所见,产品版本显示 VER_MAJOR_VERSION.VER_MINOR_VERSION.VER_HOTFIX_VERSION.VER_BUILD_NUMBER
,而不是像文件版本这样的预期整数。它使用变量名称而不是变量值。
我尝试过设置 PRODUCTVERSION
和"ProductVersion"
使用VER_FILE_VERSION
和VER_FILE_VERSION_STR
,分别代替自己单独的PRODUCT_VERSION
变量,但同样的事情发生。
使用 Visual Studio 2017、Windows SDK 10.0.15063.0
最佳答案
您不是对宏的值进行字符串化,而是对宏的名称进行字符串化。您需要额外的处理级别,以便在对结果进行字符串化之前评估宏,例如:
#define STRINGIZE_(s) #s
#define STRINGIZE(s) STRINGIZE_(s)
关于C++ 资源文件 ProductVersion 显示变量名称而不是变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59571329/