作为构建脚本的一部分,我需要将我的 delphi 项目的版本设置为与另一个项目(不是 delphi)相同。有没有办法在不通过 IDE 的情况下控制版本号,例如编译器的命令行参数或类似的东西?谢谢
问问题
4844 次
2 回答
15
包括一行
{$R 'version.res'}
在你的项目中。并使用您的版本信息创建一个 version.rc 文件。您必须使用 brcc32 在较旧的 Delphi 版本中自己构建资源。在较新的 Delphi 版本中,您可以使用
{$R 'version.res' 'version.rc'}
让 IDE 自动为您构建它。
最简单的 version.rc 看起来像:
1 VERSIONINFO
FILEVERSION 9999, 9999, 99, 18048
PRODUCTVERSION 9999, 9999, 99, 18048
FILEOS 0x00000004L // comment: VOS_WINDOWS32
FILETYPE VFT_APP
{
BLOCK "VarFileInfo"
{
VALUE "Translation", 0x409, 0x4E4 // comment: 0x4E4 = 1252
}
BLOCK "StringFileInfo"
{
BLOCK "040904E4"
{
VALUE "CompanyName", "Company Name\0"
VALUE "FileVersion", "9999.9999.99.18048\0"
VALUE "LegalCopyright", "Copyright \0"
VALUE "ProductName", "Product Name\0"
VALUE "ProductVersion", "9999.9999.99.18048\0"
VALUE "Homepage", "http://www.mydomain.com\0"
}
}
}
有关详细信息,请参阅 MSDN 上的VERSIONINFO结构。
于 2013-01-09T19:10:49.600 回答
2
Marjan 在上面给出了一个很好的答案,但我的答案更进一步。考虑这个 RC 文件:
VS_VERSION_INFO VERSIONINFO
#include "..\Ver_Num_Application.txt"
#define APPLICATION_NAME "My amazing project\0"
#define VER_NUM_ARTWORKS 4
#include "..\Libraries\Paslib32\Ver_Num_Library.txt"
#define COMPANY_NAME "My company\0"
FILEVERSION VER_NUM_ARTWORKS, VER_NUM_LIBRARY, VER_NUM_APPLICATION, 1000
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x9L
#else
FILEFLAGS 0x8L
#endif
FILEOS 0x4L
FILETYPE 0x1L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "CompanyName", COMPANY_NAME
VALUE "FileDescription", APPLICATION_NAME
VALUE "LegalCopyright", "Copyright (C) "COMPANY_NAME
VALUE "ProductName", APPLICATION_NAME
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1200
END
END
使用几个 #INCLUDE 语句的好处是您可以不理会 RC 文件,然后简单地修改(甚至自动生成)*.txt 包含文件,如下所示:
Ver_Num_Application.txt:
#define VER_NUM_APPLICATION 6
Ver_Num_Library.txt:
#define VER_NUM_LIBRARY 156
请注意,现在您必须在运行构建之前删除 *.res 文件,以强制链接器从(可能已更改)版本号重新生成它们。
于 2013-01-10T15:02:55.897 回答