使用cmake制作程序安装包

cmake官方提供了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_PATCH,

    这三个合起来的功能和CPACK_PACKAGE_VERSION的作用是一样的
  • 设置软件包名称
    set(CPACK_PACKAGE_NAME "montecarlo")
  • 设置软件包装位置
    set(CPACK_SET_DESTDIR true)
    set(CPACK_INSTALL_PREFIX "/opt/montecarlo/")
  • 设置软件包生成的位置
    set(CPACK_OUTPUT_FILE_PREFIX  ${CMAKE_CURRENT_SOURCE_DIR})
  • 设置维护者信息
    set(CPACK_DEBIAN_PACKAGE_MAINTAINER "MonteCarlo……")
  • 设置描述文件
    #set(CPACK_PACKAGE_DESCRIPTION "description")
    set(CPACK_DEBIAN_PACKAGE_DESCRIPTION "description")
    set(CPACK_PACKAGE_DESCRIPTION_SUMMARY, "description")
  • 设置安装包依赖约束关系
    set(CPACK_DEBIAN_PACKAGE_DEPENDS "libc7 (>= 2.3.1-6) , libqt5dbus5")
  • 设置自动执行脚本(postinst、postrm、preinst、prerm等,这一项比较重要)
    set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_SOURCE_DIR}/DEBIAN/postinst;${CMAKE_SOURCE_DIR}/DEBIAN/postrm;${CMAKE_SOURCE_DIR}/DEBIAN/preinst;${CMAKE_SOURCE_DIR}/DEBIAN/prerm;")
     
    基本上所有的安装包都会在安装之前或这安装之后执行一些操作,这就需要用到这个选项.
    总共有四种脚本: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/montecarlo/bin)

    将control安装到/opt/montecarlo/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/montecarlo/lib ${CMAKE_SOURCE_DIR})")

    install(CODE "execute_process(COMMAND rm -rf ${CMAKE_SOURCE_DIR}/lib/.svn ${CMAKE_SOURCE_DIR}/lib/capture/.svn)")

四. 生成安装包命令

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

五.附加

针对不同的系统及不同的安装包,还可以设置相应的变量,例如针对.deb安装包,可以设置

set (CPACK_RESOURCE_FILE_LICENSE"${CMAKE_CURRENT_SOURCE_DIR}/License.txt")

#设置架构

set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "amd64")

#设置section

set(CPACK_DEBIAN_PACKAGE_SECTION "net")

#设置priority

set(CPACK_DEBIAN_PACKAGE_PRIORITY "Optional")

 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值