zoukankan      html  css  js  c++  java
  • 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
    基本上有了这些就可以制作出你自己的安装包了

  • 相关阅读:
    6-5 函数
    6-2 触发器
    4、MongoDB学习之备份还原
    3、MongoDB学习之固定集合
    2、MongoDB学习之索引的管理
    1、MongoDB学习之基本操作
    JS-01
    | 和 ||,& 和 && 的区别
    正则
    设计测试用例的经验总结
  • 原文地址:https://www.cnblogs.com/457220157-FTD/p/4157497.html
Copyright © 2011-2022 走看看