如何使用CMake生成Windows DLL版本控制信息?

如何使用CMake生成Windows DLL版本控制信息?,windows,dll,cmake,Windows,Dll,Cmake,这非常类似于: 但我想我可能会再问一次,因为从那时起事情可能已经改变了 使用以下CMakeLists.txt文件: 我附加以下代码块: add_library(foo SHARED gdcmVersion.cxx) set_target_properties(foo PROPERTIES VERSION "1.2.3" SOVERSION "4.5") 我本以为这会填充相应的版本信息,但我不这么认为: 所以我的问题是:为了在详细信息框中填充正确的版本/版本,上面两行cmake代码

这非常类似于:

但我想我可能会再问一次,因为从那时起事情可能已经改变了

使用以下CMakeLists.txt文件:

我附加以下代码块:

add_library(foo SHARED gdcmVersion.cxx)
set_target_properties(foo PROPERTIES VERSION "1.2.3" SOVERSION "4.5")
我本以为这会填充相应的版本信息,但我不这么认为:

所以我的问题是:为了在详细信息框中填充正确的版本/版本,上面两行cmake代码实际上缺少了什么

我的设置:

  • Windows 8.1
  • Visual Studio 2019/16.1.2
  • CMake 3.14.5

  • 更新:我在这里上传了一个案例:

    我在这里看到的是使用相同的设置:

    生成的
    版本。rc
    为:

    $ cat version.rc
    // version.rc.in
    #define VER_FILEVERSION             3,5,49,0
    #define VER_FILEVERSION_STR         "3.5.49.0\0"
    
    #define VER_PRODUCTVERSION          3,5,49,0
    #define VER_PRODUCTVERSION_STR      "3.5.49\0"
    //
    

    经过多次尝试和错误,我能够正确地得到我想要的:

    因此,重要的部分是:

    1 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
      /* For some reason the ProductVersion would not appear unless I add */
      /* the following section: VarFileInfo */
      BLOCK "VarFileInfo"
      BEGIN
        VALUE "Translation", 0x0409, 1252
      END
    END
    
    参考资料:

    灵感来自: