步骤:
1. 准备模板: VersionInfo.rc.in
VersionInfo.rc.in文件中内容如下:
1 VERSIONINFO
FILEVERSION ${VERSION_MAJOR}, ${VERSION_MINOR}, ${VERSION_PATCH},${VERSION_REVISION}
PRODUCTVERSION ${VERSION_MAJOR}, ${VERSION_MINOR}, ${VERSION_PATCH},${VERSION_REVISION}
FILEFLAGSMASK 0x17L
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x4L
FILETYPE 0x0L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "FileDescription", "${COMPANY_NAME}"
VALUE "FileVersion", "${VERSION_MAJOR}, ${VERSION_MINOR}, ${VERSION_PATCH},${VERSION_REVISION}"
VALUE "InternalName", "${PRODUCT_NAME}"
VALUE "LegalCopyright", "${LegalCopyRight}"
VALUE "OriginalFilename", ""
VALUE "ProductName", "${PRODUCT_NAME}"
VALUE "ProductVersion", "${VERSION_MAJOR}, ${VERSION_MINOR}, ${VERSION_PATCH},${VERSION_REVISION}"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1200
END
END
2. 在CmakeLists中,使用set(COMPANY_NAME,"company")设置对应的信息;用CMake的configure_file
命令将.rc模板文件中的CMake变量都替换为当前CMake解析过程中的变量值;
if(MSVC)
set(COMPANY_NAME "company name")
set(PRODUCT_NAME "my product name")
set(LegalCopyRight "Copyright(C) 2022/8/17")
set(VERSION_MAJOR 0)
set(VERSION_MINOR 0)
set(VERSION_PATCH 0)
set(VERSION_REVISION 1)
set(MY_VERSIONINFO_RC "${CMAKE_BINARY_DIR}/VersionInfo.rc")
message("++++++++ CMAKE_SOURCE_DIR is: " ${CMAKE_SOURCE_DIR})
configure_file("${CMAKE_SOURCE_DIR}/VersionInfo.rc.in"
"${MY_VERSIONINFO_RC}")
endif(MSVC)
3. 加入库编译文件列表
转换后,${MY_VERSIONINFO_RC }
就存了转换后的.rc文件路径。将其加入库编译文件列表。