C++ | Lambda表达式


干啥的

C++ lambda表达式是一种匿名函数,它可以在需要函数对象的地方使用,而不需要显式地定义一个函数。

语法

[capture] (params) opt -> ret { body; }
[捕获列表](参数)mutable(可选)异常属性(可选)->返回类型{函数体}

示例

std::function<int(double)> func = [](double x)->int{ return round(x); }
std::cout << func(1.3) << endl;

捕获列表

lambda表达式的捕获列表用于指定在lambda函数体中可以访问的外部变量。捕获列表可以为空,也可以包含一个或多个捕获项,每个捕获项可以是变量、引用或者this指针。

捕获列表有以下几种形式:

  • 值捕获(value capture):通过值捕获,lambda表达式会在创建时拷贝外部变量的值,并在函数体中使用该拷贝。捕获列表使用方括号[]表示,后面跟着要捕获的变量名。例如:[x, y]表示值捕获变量x和y。
  • 引用捕获(reference capture):通过引用捕获,lambda表达式会在创建时绑定到外部变量的引用,并在函数体中使用该引用。捕获列表使用方括号[]表示,后面跟着要捕获的变量名前加上&符号。例如:[&x, &y]表示引用捕获变量x和y。
  • 隐式捕获(implicit capture):通过隐式捕获,lambda表达式会根据使用的外部变量自动推断捕获方式。捕获列表使用方括号[]表示,但不指定具体的变量名。例如:[=]表示值捕获所有外部变量,[&]表示引用捕获所有外部变量。
  • this指针捕获:通过this指针捕获,lambda表达式可以访问当前对象的成员变量。捕获列表使用方括号[]表示,后面跟着this关键字。例如:[this]表示通过值捕获当前对象的指针。

捕获列表中的变量可以在lambda函数体中使用,但不能修改(除非使用mutable关键字)。捕获列表的选择取决于外部变量的生命周期和使用方式,需要根据具体情况进行选择。

代码示例

#include <iostream>

class Example {
public:
    Example(int x) : x(x) {}

    void lambdaExample() {
        int y = 10;
        int z = 20;

        // 值捕获x,引用捕获y,隐式捕获z
        auto lambda = [&y, z, this]() mutable {
            std::cout << "x: " << x << std::endl;
            std::cout << "y: " << y << std::endl;
            std::cout << "z: " << z << std::endl;
            std::cout << "a: " << a << std::endl;

            x++; // 值捕获的变量可以修改,需要使用mutable关键字
            y++;
            // z++; // 隐式捕获的变量不能修改
            a++;
        };

        lambda();

        std::cout << "x after lambda: " << x << std::endl;
        std::cout << "y after lambda: " << y << std::endl;
        std::cout << "z after lambda: " << z << std::endl;
        std::cout << "a after lambda: " << a << std::endl;
    }

private:
    int x;
    int a = 100;
};

int main() {
    Example example(5);
    example.lambdaExample();

    return 0;
}

/**
x: 5
y: 10
z: 20
a: 100
x after lambda: 6
y after lambda: 11
z after lambda: 20
a after lambda: 101
**/

在上述示例中,lambda表达式中的捕获列表包含了部分捕获形式。值捕获了外部变量x,引用捕获了外部变量y,this指针捕获了成员变量a和变量x。lambda函数体中打印了捕获的变量,并对值捕获的变量进行了修改(需要使用mutable关键字)。在lambda函数执行后,可以看到外部变量z的值没有改变,而成员变量x,y,a的值增加了。


软件 | Veracrypt开源加密软件-硬盘、U盘、文件夹加密


描述

VeraCrypt是一款适用于Windows、Mac OSX和Linux的免费开源磁盘加密软件。基于TrueCrypt 7.1a。

主要功能

  • 在文件中创建虚拟加密磁盘,并将其作为真实磁盘装载。
  • 对整个分区或存储设备(如USB闪存驱动器或硬盘驱动器)进行加密。
  • 加密安装Windows的分区或驱动器(启动前身份验证)。
  • 加密是自动、实时(动态)和透明的。
  • 并行化和流水线技术使数据的读写速度与驱动器未加密时一样快。
  • 加密可以在现代处理器上进行硬件加速。
  • 提供合理的否认,以防对手强迫你透露密码:隐藏卷(隐写术)和隐藏操作系统。

下载地址

官方下载网址

使用流程(加密文件夹,挂载成磁盘)

  1. 安装的话就是普通软件的安装流程
  2. 软件主界面点击创建加密卷
    微信截图_20230704100252.png
  3. 选在创建文件型加密卷
    微信图片编辑_20230704100508.jpg
  4. 选择标准的加密卷,隐藏的文件描述特别逗,都能感觉到画面。。。
    微信图片编辑_20230704100508.jpg
  5. 选择加密卷存放的位置
    微信图片编辑_20230704100508.jpg
  6. 配置加密算法,对于我来说默认就行,没人没事闲的处理这些玩应
    微信截图_20230704100857.png
  7. 设置加密卷的大小,这里是文件夹挂载磁盘,所以生成文件的大小就是设置的大小,也是挂载加密磁盘后的大小。
    微信截图_20230704101059.png
  8. 配置加密卷的密码,下一步的时候密码太简单会有提示
    微信截图_20230704101247.png
  9. 格式化加密卷,其中需要移动鼠标来构建随机加密的字符串
    微信截图_20230704101404.png
  10. 最后格式化完成创建
    微信截图_20230704101616.png
  11. 挂载加密卷文件为本地磁盘
    微信截图_20230704102135.png
  12. 挂载成功,正常使用。
    屏幕截图 2023-07-04 100038.jpg

创建加密磁盘/U盘流程(待处理)

  1. 优先把U盘或磁盘的加密分区分出来格式化一下。我用的工具是DiskGenius
  2. 软件主界面点击创建加密卷
  3. 选在创建加密非系统分区/设备
    屏幕截图 2023-07-05 073400.jpg
  4. 选择标准的加密卷(与加密卷一致)
  5. 选择加密卷存放的位置
  6. 配置加密算法,对于我来说默认就行,没人没事闲的处理这些玩应
  7. 加密卷的大小不用设置,直接是磁盘大小。
    屏幕截图 2023-07-05 073545.jpg
  8. 配置加密卷的密码,下一步的时候密码太简单会有提示
  9. 格式化加密卷,其中需要移动鼠标来构建随机加密的字符串
  10. 最后格式化完成创建
  11. 挂载加密卷磁盘为本地磁盘(或者选中挂载符直接点全部加载)
    微信截图_20230705100407.png
  12. 输入密码,挂载成功,正常使用。

这里挂载需要注意一下,因为Veracrypt把磁盘变成里加密卷,所以window不能直接识别,每次插入都会提示【使用驱动器中的光盘之前需要将其格式化】,你说加密了你还不能格式话,格式完就成普通磁盘了。
微信图片编辑_20230705094656.jpg


CMake | CPack使用NSIS打包安装程序


描述

由于配置项比较多,所以单独起一篇文章来说打包的事情。所里的项目发布更新包都是手动压缩出来,其实是和不方便的。正常就应该是按照流水线形式处理,也方便以后在Jenkins等持续集成工具上打包封装。

示例代码

testLib.zip
Git 地址

实现代码

set(_install_path "bin")

install(TARGETS ${PROJECT_NAME} 
    RUNTIME 
    DESTINATION ${_install_path}                    # 指定安装目录
)

install(
    FILES                                           # 复制文件
    $<TARGET_FILE:testLib>                          # testLib库静态文件
    DESTINATION ${_install_path}                    # 指定文件复制目录
)

install(
    DIRECTORY                                       # 复制目录
    ${testLib_DIR}/../static/                       # 执行所需文件(注意:带最后一个是复制此目录下的文件,不带/则是复制static这个目录到目标目录)
    DESTINATION ${_install_path}                    # 指定复制目录
)

############################## 打包(会用到install) ##############################
include (InstallRequiredSystemLibraries)
set(CPACK_GENERATOR "NSIS")                         # 指定NSIS打包成EXE(或者ZIP、TG等)
set(CPACK_SYSTEM_NAME "win64")                      # 系统名
set(CPACK_PACKAGE_EXECUTABLES ${PROJECT_NAME} "测试软件")   # 可执行文件的名称和快捷方式标签
set(CPACK_PACKAGE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/static\\\\icon.ico")       # 安装包左上角图标(严格要求的bmp,后来处理了一下图片convert cion.bmp BMP3:cion2.bmp)
set(CPACK_PACKAGE_NAME "测试软件")                  # 设置安装包的包名,打好的包将会是<packagename>-<version>-<sys>.deb,如果不设置,默认是工程名
set(CPACK_PACKAGE_VERSION "1.0.0")                  # 设置版本号
SET(CPACK_PACKAGE_DESCRIPTION "这是一个测试软件 项目包")        # 设置description
SET(CPACK_PACKAGE_CONTACT "root@bug-maker.com")     # 设置联系方式
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "amd64")      # 设置架构
set(CPACK_DEBIAN_PACKAGE_NAME "测试软件")           # 设置程序名,就是程序安装后的名字
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "猪在天上飞")   # 设置维护人
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/static/License.txt")  # 设置安装界面的License

# set(CPACK_NSIS_CREATE_ICONS_EXTRA "CreateShortCut '$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\测试软件2.lnk' '$INSTDIR\\\\${_install_path}\\\\${PROJECT_NAME}.exe'")    # 在开始菜单中创建快捷链接
set(CPACK_NSIS_MENU_LINKS "${_install_path}\\\\${PROJECT_NAME}.exe" "测试软件2")    # 指定开始菜单中的快捷方式
set(CPACK_NSIS_CREATE_ICONS_EXTRA "CreateShortCut '$DESKTOP\\\\测试软件.lnk' '$INSTDIR\\\\${_install_path}\\\\${PROJECT_NAME}.exe'")    # 在桌面创建快捷链接
set(CPACK_NSIS_MUI_ICON "${CMAKE_CURRENT_SOURCE_DIR}/static\\\\install.ico")       # 指定NSIS安装程序的图标文件(格式要求ico)
set(CPACK_NSIS_UNINSTALL_NAME "Uninstall") # 卸载名称
set(CPACK_NSIS_MUI_UNIICON "${CMAKE_CURRENT_SOURCE_DIR}/static\\\\uninstall.ico")     # 指定NSIS卸载程序的图标文件(格式要求ico)
set(CPACK_NSIS_MUI_HEADERIMAGE "${CMAKE_CURRENT_SOURCE_DIR}/static\\\\icon2.bmp")   # 安装包左上角图标(严格要求的bmp,后来处理了一下图片convert cion.bmp BMP3:cion2.bmp)
set(CPACK_NSIS_PACKAGE_NAME "软件包名称")           # 指定生成的NSIS安装程序的名称。
set(CPACK_NSIS_PACKAGE_VERSION ${PROJECT_VERSION})  # 指定生成的NSIS安装程序的版本号。
set(CPACK_NSIS_PACKAGE_VENDOR "供应商名称")         # 指定生成的NSIS安装程序的供应商名称。
set(CPACK_NSIS_PACKAGE_DESCRIPTION "简单的描述")    # 指定生成的NSIS安装程序的描述。
set(CPACK_NSIS_BRANDING_TEXT "左下角描述")          # 左下角描述
set(CPACK_NSISDISPLAY_NAME "显示名称")              # 指定生成的NSIS安装程序的显示名称。
set(CPACK_NSIS_HELP_LINK "https://www.test.com/help") # 指定生成的NSIS安装程序的帮助链接。
set(CPACK_NSIS_PACKAGE_URL "https://www.test.com")  # 指定生成的NSIS安装程序的URL链接。

include(CPack)

说明

CPack NSIS Generator的配置描述

  1. CPACK_NSIS_INSTALL_ROOT
    指定用户默认安装路径
  2. CPACK_NSIS_MUI_ICON
    指定NSIS安装程序的图标文件(格式要求.ico)
  3. CPACK_NSIS_MUI_UNIICON
    指定NSIS卸载程序的图标文件(格式要求.ico)
  4. CPACK_NSIS_INSTALLER_MUI_ICON_CODE
    允许你指定一个NSIS脚本代码片段,用于设置安装程序的MUI图标,可以使用NSIS的内置函数和命令来设置图标。
  5. CPACK_NSIS_MUI_WELCOMEFINISHPAGE_BITMAP(CMake 3.5 添加)
    指定一个位图图像文件的路径,用于替换NSIS MUI插件默认的欢迎页和完成页的图像。
  6. CPACK_NSIS_MUI_UNWELCOMEFINISHPAGE_BITMAP(CMake 3.5 添加)
    指定一个位图图像文件的路径,用于替换NSIS MUI插件默认的取消欢迎页和完成页的图像。
  7. CPACK_NSIS_EXTRA_PREINSTALL_COMMANDS
    指定一个或多个自定义命令,这些命令将在NSIS安装程序执行预安装命令之前执行。
  8. CPACK_NSIS_EXTRA_INSTALL_COMMANDS
    指定一个或多个自定义命令,这些命令将在NSIS安装程序执行预安装命令之后执行。
  9. CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS
    指定一个或多个自定义命令,这些命令将在NSIS安装程序执行卸载命令之后执行。
  10. CPACK_NSIS_COMPRESSOR
    指定NSIS安装程序生成时使用的压缩器。默认情况下,CPack使用NSIS的默认压缩器,即zlib压缩器。参数:zlib、lzma、bzip2
  11. CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL
    指定是否在安装之前先执行卸载操作(卸载自己)。默认为OFF,即不启用在安装之前先卸载的功能。
  12. CPACK_NSIS_MODIFY_PATH
    指定是否在安装过程中修改系统的PATH环境变量。默认为ON,即允许修改系统的PATH环境变量。
  13. CPACK_NSIS_DISPLAY_NAME
    指定生成的NSIS安装程序在Windows系统中显示的名称。默认该变量的值为项目的名称。
  14. CPACK_NSIS_PACKAGE_NAME
    指定生成的NSIS安装程序的名称。
  15. CPACK_NSIS_INSTALLED_ICON_NAME
    指定在Windows系统中安装完成后的快捷方式图标的名称。默认情况下,该变量的值为项目的图标文件名。
  16. CPACK_NSIS_HELP_LINK
    指定生成的NSIS安装程序的帮助链接。
  17. CPACK_NSIS_URL_INFO_ABOUT
    指定生成的NSIS安装程序的URL链接。
  18. CPACK_NSIS_CONTACT
    指定生成的NSIS安装程序中的联系信息。
  19. CPACK_NSIS_<compName>_INSTALL_DIRECTORY(CMake 3.7 添加)
    为特定的组件(compName)指定一个自定义的安装目录。默认情况下,该变量的值为空,即使用默认的安装目录。
  20. CPACK_NSIS_CREATE_ICONS_EXTRA
    命令形式创建开始菜单快捷方式
  21. CPACK_NSIS_DELETE_ICONS_EXTRA
    命令形式删除开始菜单快捷方式
  22. CPACK_NSIS_EXECUTABLES_DIRECTORY
    指定在NSIS安装程序中可执行文件的目录,默认为空,即使用默认的可执行文件目录。
  23. CPACK_NSIS_MUI_FINISHPAGE_RUN
    指定在NSIS安装程序的完成页面上显示的一个可执行文件的路径。默认为空,即不会在完成页面上显示任何可执行文件。
  24. CPACK_NSIS_MENU_LINKS
    指定开始菜单中的快捷方式。
  25. CPACK_NSIS_UNINSTALL_NAME(CMake 3.17 添加)
    指定卸载程序名称。 默认值为Uninstall。
  26. CPACK_NSIS_WELCOME_TITLE(CMake 3.17 添加)
    指定欢迎页面头部标题文字
  27. CPACK_NSIS_WELCOME_TITLE_3LINES(CMake 3.17 添加)
    指定NSIS安装程序的欢迎页面标题的三行文本。默认为空,即使用默认的欢迎页面标题。
  28. CPACK_NSIS_FINISH_TITLE(CMake 3.17 添加)
    指定NSIS安装程序的完成页面标题的三行文本
  29. CPACK_NSIS_FINISH_TITLE_3LINES(CMake 3.17 添加)
    指定NSIS安装程序的完成页面标题的三行文本。默认为空,即使用默认的完成页面标题。
  30. CPACK_NSIS_MUI_HEADERIMAGE(CMake 3.17 添加)
    指定NSIS安装程序的左上角图标(严格要求的bmp,后来处理了一下图片convert cion.bmp BMP3:cion2.bmp)
  31. CPACK_NSIS_MANIFEST_DPI_AWARE
    指定NSIS安装程序中应用程序的DPI感知属性。默认为空,即不设置DPI感知属性。参数:"default"、"true"、"false"
  32. CPACK_NSIS_BRANDING_TEXT(CMake 3.20 添加)
    指定NSIS安装程序中左下角标线描述。
  33. CPACK_NSIS_BRANDING_TEXT_TRIM_POSITION(CMake 3.20 添加)
    指定NSIS安装程序中品牌文本的截断位置。默认为空,即不进行品牌文本的截断。参数:"left"、"right"
  34. CPACK_NSIS_EXECUTABLE(CMake 3.21 添加)
    指定NSIS安装程序的可执行文件。默认为空,即使用默认的可执行文件。
  35. CPACK_NSIS_IGNORE_LICENSE_PAGE(CMake 3.22 添加)
    指定NSIS安装程序是否忽略许可协议页面。默认为空,即不忽略许可协议页面。参数:"ON"、"OFF"
  36. CPACK_NSIS_EXECUTABLE_PRE_ARGUMENTS(CMake 3.25 添加)
    指定在NSIS安装程序运行可执行文件之前要添加的额外参数。
  37. CPACK_NSIS_EXECUTABLE_POST_ARGUMENTS
    指定在NSIS安装程序运行可执行文件之后要添加的额外参数。

注意事项

生成

E:\test\testMain\build>cpack.exe CPackConfig.cmake
CPack: Create package using NSIS
CPack: Install projects
CPack: - Install project: testMain []
CPack: Create package
CPack: - package: E:/test/testMain/build/测试软件-1.0.0-win64.exe generated.

最后效果

屏幕截图 2023-06-30 112619.jpg
屏幕截图 2023-06-30 112638.jpg


Docker | -v 对挂载的目录没有权限 Permission denied


情况

今天用docker部署jenkins的时候碰到问题了,挂载的目录权限出现了问题。本人的解决办法是临时关闭selinux即可

报错代码

touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied
Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?

问题所在

centos7中安全模块selinux把权限禁掉了。

jenkins的composer

version: "3"
services:
  jenkins:
    build: .
    container_name: jenkins
    ports:
      - "8083:8080"
    volumes:
      - "/home/jenkins:/var/jenkins_home"
    image: jenkins/jenkins:lts
    restart: always

处理流程

  1. 先不添加挂载的情况查看一下文件需要的用户权限是啥,这里显示的是jenkins:jenkins
    屏幕截图 2023-06-28 105338.jpg
  2. 心思直接赋上1000的权限,才发现容器内外权限不能通用
  3. 临时禁用selinux
setenforce 0
  1. 启动jenkins容器即可

四种解决方案

1.在运行时加 --privileged=true

docker run -d -p 8083:8080 -v /home/jenkins:/var/jenkins_home --privileged=true --name jenkins jenkins/jenkins:lts

2.临时关闭selinux然后再打开

[root@localhost home]# setenforce 0
[root@localhost home]# docker start jenkins
[root@localhost home]# setenforce 1

3.永久关闭selinux,修改/etc/selinux/config

SELINUX=enforcing
改为
SELINUX=disabled

4.添加linux规则,把要挂载的目录添加到selinux白名单

chcon -Rt svirt_sandbox_file_t /home/jenkins/

chcon命令简介

chcon命令 是修改对象(文件)的安全上下文,比如:用户、角色、类型、安全级别。也就是将每个文件的安全环境变更至指定环境。使用--reference选项时,把指定文件的安全环境设置为与参考文件相同。chcon命令位于/usr/bin/chcon。

语法

chcon [选项]... 环境 文件...
chcon [选项]... [-u 用户] [-r 角色] [-l 范围] [-t 类型] 文件...
chcon [选项]... --reference=参考文件 文件...

选项

-h, --no-dereference:影响符号连接而非引用的文件。

--reference=参考文件:使用指定参考文件的安全环境,而非指定值。

-R, --recursive:递归处理所有的文件及子目录。
-v, --verbose:为处理的所有文件显示诊断信息。
-u, --user=用户:设置指定用户的目标安全环境。
-r, --role=角色:设置指定角色的目标安全环境。
-t, --type=类型:设置指定类型的目标安全环境。
-l, --range=范围:设置指定范围的目标安全环境。

以下选项是在指定了-R选项时被用于设置如何穿越目录结构体系。如果您指定了多于一个选项,那么只有最后一个会生效。

-H:如果命令行参数是一个通到目录的符号链接,则遍历符号链接。
-L:遍历每一个遇到的通到目录的符号链接。
-P:不遍历任何符号链接(默认)。
--help:显示此帮助信息并退出。
--version:显示版本信息并退出。


CMake: 引入三方库及打包当前项目


前述

这里整一个cmake引入三方库及导出安装包的示例代码。
引入三方库用的是

set(*_DIR "**")
find_package(*)
target_link_libraries(${PROJECT_NAME} PRIVATE *)

导出安装报用到的是

install(TARGETS ${PROJECT_NAME} 
    RUNTIME 
    DESTINATION bin
)

install(
    FILES
    $<TARGET_FILE:*>
    DESTINATION bin
)
include (InstallRequiredSystemLibraries)\
...此处为CPack配置...
include(CPack)

示例

test.zip
Git testMain
Git testLib

CPack文档地址

https://cmake.org/cmake/help/latest/manual/cpack-generators.7.html

代码

部分代码已注释,具体详解也写道对应的注释里了。

cmake_minimum_required(VERSION 3.5.0)
project(testMain VERSION 0.1.1 LANGUAGES C CXX)

# set(testLib_DIR "Y:\\thirdparty\\testLib\\cmake")   # 如果不是安装形式的第三方库需要设置对应目录
find_package(testLib REQUIRED)                      # 查找已安装的三方库

include_directories(include)                        # 添加头文件路径
file(GLOB FILES_SRC "src/*.cpp")                    # 添加当前目录下的源文件至FILES_SRC

add_executable(${PROJECT_NAME} "main.cpp" ${FILES_SRC})

target_link_libraries(${PROJECT_NAME} PRIVATE testLib)

add_custom_command(                                 # 将自定义构建规则添加到生成的构建系统
    TARGET ${PROJECT_NAME}  POST_BUILD 
    COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:testLib> $<TARGET_FILE_DIR:${PROJECT_NAME}>         # 复制testLib.dll文件到目标目录
    # COMMAND ${CMAKE_COMMAND} -E make_directory $<TARGET_FILE_DIR:${PROJECT_NAME}>/bin/                              # 创建bin目录存放三方dll
    # COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:testLib> $<TARGET_FILE_DIR:${PROJECT_NAME}>/bin/    # 复制dll库到bin目录
)

# add_custom_target(                                  # 增加一个没有输出的目标(总会被构建)
#     CopyFile
#     VERBATIM
#     COMMAND_EXPAND_LISTS
#     COMMAND ${CMAKE_COMMAND} -E copy_if_different
#     $<TARGET_FILE:testLib> $<TARGET_FILE_DIR:${PROJECT_NAME}>
# )

install(TARGETS ${PROJECT_NAME} 
    RUNTIME 
    DESTINATION bin                                 # 指定安装目录
)

install(
    FILES
    $<TARGET_FILE:testLib>
    DESTINATION bin                                 # 指定文件复制目录
)

############################## 打包 ##############################
include (InstallRequiredSystemLibraries)
# set(CPACK_GENERATOR ZIP)                            # 指定打包成ZIP
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/License.txt")  #设置安装界面的License
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "amd64")      #设置架构
set(CPACK_DEBIAN_PACKAGE_NAME "测试软件")           #设置程序名,就是程序安装后的名字
set(CPACK_PACKAGE_NAME "测试软件")                  #设置安装包的包名,打好的包将会是<packagename>-<version>-<sys>.deb,如果不设置,默认是工程名
set(CPACK_PACKAGE_VERSION "1.0.0")                  #设置版本号
set(CPACK_SYSTEM_NAME "win64")                      #系统名
SET(CPACK_PACKAGE_DESCRIPTION "这是一个测试软件 项目包")        #设置description
SET(CPACK_PACKAGE_CONTACT "root@bug-maker.com")     #设置联系方式
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "猪在天上飞")   #设置维护人
# set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_SOURCE_DIR}/DEBIAN/postinst;${CMAKE_SOURCE_DIR}/DEBIAN/postrm;")  #设置包的安装脚本
include(CPack)

结果