cpack

一. 简介

CPack是CMake 2.4.2之后的一个内置工具,主要作用就是生成制定类型的安装包.它可以脱离cmake单独运行.

二. 基本设置 (mandatory)
  • 设置包类型
    set(CPACK_GENERATOR "DEB")  
    NOTE:参数可以是你所知道的任意压缩包类型,rpm,tar.gz等等,请参见官方wiki
  • 设置软件包版本
    set(CPACK_PACKAGE_VERSION "2.1") 
    NOTE:当然cpack还提供了CPACK_PACKAGE_VERSION_MAJOR/CPACK_PACKAGE_VERSION_MINOR/CPACK_PACKAGE_VERSION,
    这三个合起来的功能和CPACK_PACKAGE_VERSION的作用是一样的
  • 设置软件包名称
    set(CPACK_PACKAGE_NAME "omatrix")
  • 设置软件包装位置
    set(CPACK_SET_DESTDIR true)
    set(CPACK_INSTALL_PREFIX "/opt/omatrix/")
  • 设置软件包生成的位置
    set(CPACK_OUTPUT_FILE_PREFIX  ${CMAKE_CURRENT_SOURCE_DIR})
  • 设置维护者信息
    set(CPACK_DEBIAN_PACKAGE_MAINTAINER "EFlag")
  • 设置描述文件
    set(CPACK_PACKAGE_DESCRIPTION "OMatrix core to capture and decode the traffic")
    set(CPACK_PACKAGE_DESCRIPTION_SUMMARY, "Packet capturing and decoding")
  • 设置安装包约束关系
    set(CPACK_DEBIAN_PACKAGE_DEPENDS "libc7 (>= 2.3.1-6) ")
  • 设置自动执行脚本(这一项比较重要)
    set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_SOURCE_DIR}/DEBIAN/postinst;${CMAKE_SOURCE_DIR}/DEBIAN/postrm;")
     
    基本上所有的安装包都会在安装之前或这安装之后执行一些操作,这就需要用到这个选项.
    总共有四种脚本:preinst(安装前执行), postinst(安装后执行), prerm(删除前执行), postrm(删除后执行)
    还要注意的就是这些脚本的权限问题,不要使用chmod u+x来赋权限,最好使用chmod 0777
  • 这一句放在CMakeLists.txt文件最后,不能少
    include(CPack)
三. 语法

在cpack中你要掌握的唯一语法就是install, 这个主要就是在制作安装包的过程中调用的

  • 目标文件
    install(TARGETS <targets>
            [[ARCHIVE|LIBRARY|RUNTIME]
             [DESTINATION <dir>]
             [PERMISSIONS <permissions>
             [Debug|Release..]]
             [COMPONENT <component>]
             [OPTIONAL]
            ][...])
     
    简单例子:
    INSTALL(TARGETS myrun mylib mystaticlib
         RUNTIME DESTINATION bin
         LIBRARY DESTINATION lib
         ARCHIVE DESTINATION libstatic
        )
    上面的例子会将:
    可执行二进制 myrun 安装到${CMAKE_INSTALL_PREFIX}/bin 目录
    动态库 libmylib 安装到${CMAKE_INSTALL_PREFIX}/lib 目录
    静态库 libmystaticlib 安装到${CMAKE_INSTALL_PREFIX}/libstatic 目录
    特别注意的是你不需要关心 TARGETS 具体生成的路径,只需要写上 TARGETS 名称就可以了
  • 非目标文件的可执行程序(当然也可以是目标文件的可执行程序)
    INSTALL(PROGRAMS files... DESTINATION <dir>
    [PERMISSIONS permissions...]
    [CONFIGURATIONS [Debug|Release|...]]
    [COMPONENT <component>]
    [RENAME <name>] [OPTIONAL])
     
    简单例子:
    install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/control DESTINATION opt/omatrix/bin)
    将control安装到/opt/omatrix/bin下
  • 普通文件的安装:
    INSTALL(FILES files... DESTINATION <dir>
    [PERMISSIONS permissions...]
    [CONFIGURATIONS [Debug|Release|...]]
    [COMPONENT <component>]
    [RENAME <name>] [OPTIONAL])
  • 目录的安装:
    INSTALL(DIRECTORY dirs... DESTINATION <dir>
    [FILE_PERMISSIONS permissions...]
    [DIRECTORY_PERMISSIONS permissions...]
    [USE_SOURCE_PERMISSIONS]
    [CONFIGURATIONS [Debug|Release|...]]
    [COMPONENT <component>]
    [[PATTERN <pattern> | REGEX <regex>]
    [EXCLUDE] [PERMISSIONS permissions...]] [...])
     
    简单例子:
    install(DIRECTORY tool DESTINATION ${INSTALL_PATH}
            FILE_PERMISSIONS OWNER_WRITE OWNER_READ OWNER_EXECUTE
                             GROUP_READ GROUP_EXECUTE
                             WORLD_READ WORLD_EXECUTE
        )
  • 在安装的时候执行一些shell命令
    install(CODE "EXECUTE_PROCESS(COMMAND cp -r /opt/omatrix/lib ${CMAKE_SOURCE_DIR})")
    install(CODE "execute_process(COMMAND rm -rf ${CMAKE_SOURCE_DIR}/lib/.svn ${CMAKE_SOURCE_DIR}/lib/capture/.svn)")
四. 生成安装包命令

make package
基本上有了这些就可以制作出你自己的安装包了

原文地址:https://www.cnblogs.com/457220157-FTD/p/4157497.html