我需要在不使用第三方工具的情况下,通过CMake生成的C++动态链接库中添加信息。我尝试在我的目录中添加一个version.rc文件并将其包含在CMakeLists文件中,但它似乎没有填充DLL信息框中的字段。
CMakeLists:
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/version.rc.in
${CMAKE_CURRENT_SOURCE_DIR}/version.rc
@ONLY
)
add_library(foo SHARED
${CMAKE_CURRENT_SOURCE_DIR}/version.rc)
)
version.rc
#define VER_FILEVERSION 3,10,349,0
#define VER_FILEVERSION_STR "3.10.349.0\0"
#define VER_PRODUCTVERSION 3,10,0,0
#define VER_PRODUCTVERSION_STR "3.10\0"
#ifndef DEBUG
#define VER_DEBUG 0
#else
#define VER_DEBUG VS_FF_DEBUG
#endif
VS_VERSION_INFO VERSIONINFO
FILEVERSION VER_FILEVERSION
PRODUCTVERSION VER_PRODUCTVERSION
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904E4"
BEGIN
VALUE "FileVersion", VER_FILEVERSION_STR
VALUE "ProductVersion", VER_PRODUCTVERSION_STR
END
END
BLOCK "VarFileInfo"
BEGIN
/* The following line should only be modified for localized versions. */
/* It consists of any number of WORD,WORD pairs, with each pair */
/* describing a language,codepage combination supported by the file. */
/* */
/* For example, a file might have values "0x409,1252" indicating that it */
/* supports English language (0x409) in the Windows ANSI codepage (1252). */
VALUE "Translation", 0x409, 1252
END
END
发布于 2020-07-28 23:02:00
没有一个完整的答案为什么它在你的情况下不起作用。我认为资源文件的格式无效,或者您在versioninfo块中缺少必要的字段信息。
已知可在另一个项目中工作的版本信息资源模板(versioninfo.rc.cmake.in
)如下所示:
1 TYPELIB "versioninfo.rc"
1 VERSIONINFO
FILEVERSION @PROJECT_VERSION_MAJOR@, @PROJECT_VERSION_MINOR@, @PROJECT_VERSION_PATCH@, 0
PRODUCTVERSION @PROJECT_VERSION_MAJOR@, @PROJECT_VERSION_MINOR@, @PROJECT_VERSION_PATCH@, 0
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x4L
FILETYPE 0x2L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904e4"
BEGIN
VALUE "CompanyName", "Foonatic Ltd."
VALUE "FileDescription", "foobar library - https://github.com/foobar/"
VALUE "FileVersion","@PROJECT_VERSION_MAJOR@, @PROJECT_VERSION_MINOR@, @PROJECT_VERSION_PATCH@, 0"
VALUE "InternalName", "@PROJECT_NAME@"
VALUE "LegalCopyright", "Copyright (c) 2020 Foonatic Ltd."
#ifdef _DEBUG
VALUE "OriginalFilename", "foobarD.dll"
#else
VALUE "OriginalFilename", "foobar.dll"
#endif
VALUE "ProductName", "foobar"
VALUE "ProductVersion","@PROJECT_VERSION_MAJOR@, @PROJECT_VERSION_MINOR@, @PROJECT_VERSION_PATCH@, 0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1252
END
END
它由configure_file
命令处理成${CMAKE_CURRENT_BINARY_DIR}
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/versioninfo.rc.cmake.in versioninfo.rc @ONLY)
并添加了以下两个选项之一:
add_library(dll_target_name SHARED dll_source.cpp "${CMAKE_CURRENT_BINARY_DIR}/versioninfo.rc")
或者
target_sources(dll_target_name PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/versioninfo.rc")
添加到DLL目标。
https://stackoverflow.com/questions/63133300
复制相似问题