一. 简介

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
基本上有了这些就可以制作出你自己的安装包了

cpack的更多相关文章

  1. cmake cpack 安装打包程序

    //set(CPACK_GENERATOR "TGZ") 7Z(.7z) 7Zzip(.7z) TBZ2(tar.bz2) TGZ(.tar.gz) TXZ(.tar.xz) TZ ...

  2. Red Hat5下源码安装mysql5.6过程记录

    1.安装cmake包 [root@edu soft]# tar -xzf cmake-.tar.Z [root@edu soft]# cd cmake- [root@edu cmake-]# ./co ...

  3. CMake使用教程

    转自 RichardXG 原文 CMake使用教程 CMake是一个比make更高级的编译配置工具,它可以根据不同平台.不同的编译器,生成相应的Makefile或者vcproj项目. 通过编写CMak ...

  4. 非常陌生的cmake

    CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程).他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的 ...

  5. CMake入门指南-编译教程

    CMake是一个比make更高级的编译配置工具,它可以根据不同平台.不同的编译器,生成相应的Makefile或者vcproj项目.通过编写CMakeLists.txt,可以控制生成的Makefile, ...

  6. Chocolatey的安装与使用

    @(编程) 前言 在 Linux 下,大家喜欢用 apt-get 来安装应用程序,如今在 windows 下,大家可以使用 Chocolatey 来快速下载搭建一个开发环境. Chocolatey 的 ...

  7. Percona-Server-5.5.15源码安装

    [root@localhost rpm]# ll total 19148 -rw-r--r-- 1 root root   562628 Jan 18  2007 bison-2.3-2.1.x86_ ...

  8. [转载] CMake Official Tutorial——教程还是官方的好

    CMake官方教程传送门:https://cmake.org/cmake-tutorial/ 以下的内容跟官方教程基本一致,少数地方根据自己的测试有所改动: A Basic Starting Poin ...

  9. CMake 简单介绍 图

    http://tech.uc.cn/?p=914     CMake特点 CMake需要用户用CMake规范的语法编写CMake脚本,该语法简单易用,入门极其顺手 原生支持 C/C++/Fortran ...

随机推荐

  1. URL编码CFURLCreateStringByAddingPercentEscapes使用(ARC)

    URL 编码:CFURLCreateStringByAddingPercentEscapes If you have tried to send any information using a GET ...

  2. js封装 与 js高级用法 问题集合

    1. 什么是自执行的匿名函数? 它是指形如这样的函数: (function {// code})(); 2. 疑问 为什么(function {// code})();可以被执行, 而function ...

  3. 使用Jenkins搭建持续集成服务

    1. 什么是持续集成 持续集成 (Continuous Integration, 简称 CI) 是软件工程中的一种实践, 用于将开发人员不同阶段的工作成果集成起来, 通常一天之中会进行多次. 持续集成 ...

  4. 内存调试工具---valgrind

    安装 1.到www.valgrind.org下载最新版valgrind-3.2.3.tar.bz2 2.解压安装包:tar –jxvf valgrind-3.2.3.tar.bz2 3.解压后生成目录 ...

  5. jQuery formValidator表单验证插件常见问题

    1.    如何实现一个控件,根据不同的情况,实现不同的控制? 2.    一个页面上我有几个tab页,如何实现每个Tab页上的控件单独校验? 3.    我采用的页面上文字问题的方式,点提交的时候, ...

  6. 浅谈 Linux 内核开发之网络设备驱动

    转自http://www.ibm.com/developerworks/cn/linux/l-cn-networkdriver/ 网络设备介绍 网络设备是计算机体系结构中必不可少的一部分,处理器如果想 ...

  7. HDU 4081 Qin Shi Huang's National Road System [次小生成树]

    题意: 秦始皇要建路,一共有n个城市,建n-1条路连接. 给了n个城市的坐标和每个城市的人数. 然后建n-2条正常路和n-1条魔法路,最后求A/B的最大值. A代表所建的魔法路的连接的城市的市民的人数 ...

  8. LeetCode 125. Valid Palindrome

    这个题目只要注意大小写问题即可解决,而且我们只关注的是字母和数值 Given a string, determine if it is a palindrome, considering only a ...

  9. 2013 ACM 通化邀请赛 A. Tutor

    A. Tutor Description Lilin was a student of Tonghua Normal University. She is studying at University ...

  10. Rolling Cursor Invalidations with DBMS_STATS.AUTO_INVALIDATE (文档 ID 557661.1)

      Rolling Cursor Invalidations with DBMS_STATS.AUTO_INVALIDATE (文档 ID 557661.1) 转到底部 In this Documen ...