首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用cmake编译时将版权/文件描述信息添加到dll

使用cmake编译时将版权/文件描述信息添加到dll
EN

Stack Overflow用户
提问于 2020-07-28 19:40:59
回答 1查看 553关注 0票数 0

我需要在不使用第三方工具的情况下,通过CMake生成的C++动态链接库中添加信息。我尝试在我的目录中添加一个version.rc文件并将其包含在CMakeLists文件中,但它似乎没有填充DLL信息框中的字段。

CMakeLists:

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
#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
EN

回答 1

Stack Overflow用户

发布于 2020-07-28 23:02:00

没有一个完整的答案为什么它在你的情况下不起作用。我认为资源文件的格式无效,或者您在versioninfo块中缺少必要的字段信息。

已知可在另一个项目中工作的版本信息资源模板(versioninfo.rc.cmake.in)如下所示:

代码语言:javascript
运行
复制
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}

代码语言:javascript
运行
复制
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/versioninfo.rc.cmake.in versioninfo.rc @ONLY)

并添加了以下两个选项之一:

代码语言:javascript
运行
复制
add_library(dll_target_name SHARED dll_source.cpp "${CMAKE_CURRENT_BINARY_DIR}/versioninfo.rc")

或者

代码语言:javascript
运行
复制
target_sources(dll_target_name PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/versioninfo.rc")

添加到DLL目标。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63133300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档