一、windows平台
windows下使用visual studio自带的动态库工程开发dll,可以帮助我们把版本号、公司名等信息生成到dll中,但是Cmake中的add_library生成的dll没有任何额外信息。 如下cuda.dll,右键通过详细信息就可以看到 文件说明、类型、文件版本、版权等多种信息。 这也意味着再也不需要去查文档、查头文件就能知道这个DLL是哪个版本啦。
二、具体方法
- 准备一个.rc.in的文件,里面对应着CMake的变量
- 再CMakeList.txt中,通过configure_file 命令,将rc.in 生成一个rc文件。
- add_library 编译生成库时,将2中的rc文件也包含在内
CMakeList中,通过set(MY_PRODUCT_NUMBER 3) 将版本号传入变量中,再通过
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/version.rc.in
${CMAKE_CURRENT_BINARY_DIR}/version.rc
@ONLY)
将rc模板中的变量传入到rc中,最后在编译生成库的时候,将生成的rc添加进去。
add_library(foo SHARED foo.cpp
${CMAKE_CURRENT_BINARY_DIR}/version.rc)
三、例子
来自https://github.com/malaterre/PublicRep/tree/master/CMake/test3 如下一个小例子,有三个文件
version.rc.in 的内容为
// version.rc.in
//
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", 0x409, 1252
END
END
CMakeList 内容为
cmake_minimum_required(VERSION 3.14)
project(test3 C)
set(MY_PRODUCT_NUMBER 3)
set(MY_PRODUCT_VERSION 5)
set(MY_BUILD_NUMBER 49)
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/version.rc.in
${CMAKE_CURRENT_BINARY_DIR}/version.rc
@ONLY)
add_library(foo SHARED foo.cpp
${CMAKE_CURRENT_BINARY_DIR}/version.rc)
直接运行编译,生成的dll文件就可以看到信息拉
Reference
CMake为自己创建的库添加版本信息 https://github.com/malaterre/PublicRep/tree/master/CMake/test3
https://stackoverflow.com/questions/57791746/how-do-i-generate-windows-dll-versioning-information-with-cmake?noredirect=1&lq=1
|