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 mystaticlibRUNTIME DESTINATION binLIBRARY DESTINATION libARCHIVE 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_EXECUTEGROUP_READ GROUP_EXECUTEWORLD_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的更多相关文章
- cmake cpack 安装打包程序
//set(CPACK_GENERATOR "TGZ") 7Z(.7z) 7Zzip(.7z) TBZ2(tar.bz2) TGZ(.tar.gz) TXZ(.tar.xz) TZ ...
- Red Hat5下源码安装mysql5.6过程记录
1.安装cmake包 [root@edu soft]# tar -xzf cmake-.tar.Z [root@edu soft]# cd cmake- [root@edu cmake-]# ./co ...
- CMake使用教程
转自 RichardXG 原文 CMake使用教程 CMake是一个比make更高级的编译配置工具,它可以根据不同平台.不同的编译器,生成相应的Makefile或者vcproj项目. 通过编写CMak ...
- 非常陌生的cmake
CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程).他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的 ...
- CMake入门指南-编译教程
CMake是一个比make更高级的编译配置工具,它可以根据不同平台.不同的编译器,生成相应的Makefile或者vcproj项目.通过编写CMakeLists.txt,可以控制生成的Makefile, ...
- Chocolatey的安装与使用
@(编程) 前言 在 Linux 下,大家喜欢用 apt-get 来安装应用程序,如今在 windows 下,大家可以使用 Chocolatey 来快速下载搭建一个开发环境. Chocolatey 的 ...
- 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_ ...
- [转载] CMake Official Tutorial——教程还是官方的好
CMake官方教程传送门:https://cmake.org/cmake-tutorial/ 以下的内容跟官方教程基本一致,少数地方根据自己的测试有所改动: A Basic Starting Poin ...
- CMake 简单介绍 图
http://tech.uc.cn/?p=914 CMake特点 CMake需要用户用CMake规范的语法编写CMake脚本,该语法简单易用,入门极其顺手 原生支持 C/C++/Fortran ...
随机推荐
- html table单双行颜色间隔(转载)
直接上代码: <html> <head> <meta http-equiv="Content-Type" content="text/htm ...
- jsLint配置参数解释
转自: http://www.cnblogs.com/elementstorm/archive/2013/04/10/3012679.htmlanon :true //匿名函数声明中function关 ...
- Ubuntu设置环境变量并立即生效
Ubuntu Linux系统包含两类环境变量:系统环境变量和用户环境变量.系统环境变量对所有系统用户都有效,用户环境变量仅仅对当前的用户有效. 修改用户环境变量 用户环境变量通常被存储在下面的文件中: ...
- linux下分卷tar.bz文件的合并并解压缩
linux下分卷tar.bz文件的合并并解压缩 例: linux.tar.bz2.001;linux.tar.bz2.002;linux.tar.bz2.003; 首先 cat linux.tar.b ...
- 认识与学习BASH
应用程序在最外面,就如同鸡蛋的外壳一样,因此被称呼为shell(壳程序).其实壳程序的功能只是提供操作系统的一个接口. 应用程序 ↓ 操作系统(系统呼叫+核心) ↓ 硬件 linux预设的shell就 ...
- 使用maven构建一个helloworld maven项目
1.下载maven http://maven.apache.org/ 选择一个较新版本下下来 2.配置m2_home环境变量 先解压,新建用户变量m2_home,将bin目录添加到path变量中 3. ...
- mysql 怎么登录
mysql -uroot -p回车后,输入密码,再回车即可.如果自己没有修改的话,默认密码为空.
- Fegla and the Bed Bugs 二分
Fegla and the Bed Bugs Fegla, also known as mmaw, is coaching a lot of teams. All these teams train ...
- android 图片叠加效果——两种方法
效果图: 第一种: 第二种: 第一种是通过canvas画出来的效果: public void first(View v) { // 防止出现Immutable bitmap passed to Can ...
- 利用KeyVault来加强存储Azure Storage访问密钥管理
很多时候管理Azure的存储账号我们都需要通过下面的界面管理访问密钥,大部分情况下通过密钥的轮替使用更新就可以做到安全管理了. 但是很多时候存储账号的Key就会不小心分发到开人员.测试人员.和管理员手 ...