【问题标题】:Adding Copyright / File description info to dll when compiling with cmake使用 cmake 编译时向 dll 添加版权/文件描述信息
【发布时间】:2020-07-28 11:40:58
【问题描述】:

我需要将信息添加到我通过 CMake 生成的 C++ DLL 中,而不使用第三方工具。 我尝试将 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)
)

版本.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

【问题讨论】:

标签: c++ winapi dll cmake


【解决方案1】:

不是完整的答案,为什么它不适用于您的情况。我想资源文件的格式无效,或者您缺少来自 versioninfo 块的基本字段信息。

已知可用于另一个项目的 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 目标。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-06
    • 1970-01-01
    • 2021-10-19
    • 2012-01-31
    • 1970-01-01
    • 2012-06-27
    • 2011-10-05
    • 1970-01-01
    相关资源
    最近更新 更多