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 ...
随机推荐
- Windows 32 程序设计
C语言版 开发语言:C语言 开发工具:Visual Studio 2015 目 标:使用C语言,直接调用Windows API,创建Windows程序. 参考图书:<Windows程序 ...
- Python标准库10 多进程初步 (multiprocessing包)
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 我们已经见过了使用subprocess包来创建子进程,但这个包有两个很大的局限性: ...
- wcf使用task实现异步调用
private async void btnGetEmployees_Click(object sender, RoutedEventArgs e) { txtInfo.Text = "Da ...
- 看oracle版本
源地址:http://www.cnblogs.com/wolfplan/p/3876164.html select * from v$version;
- Play framework(二)
Play 2.0 的完整演示过程记录 http://www.oschina.net/translate/playframework-20-live-coding-script todolist代码
- java中的xml与实体类之间的映射
实体类: package xml; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class User ...
- Codeforces 404D [DP]
/* 我是一个习惯后悔,但是没办法忍受内疚感的二货== 这题是个无脑dp,但是比赛大概20min没出...其实最后5min我好好想想简单化边界条件,可以出的. 题意: 给你一个长度为1e6的由?*01 ...
- CodeForces 617C【序枚举】
题意: 有两个点喷水,有很多个点有花,给出坐标. 求使得每个花都可以被喷到,两个喷水的半径的平方的和最小是多少. 思路: 枚举其中一个喷水的最大半径. 坑: 这题我贪心的思路有很大问题.一开始也是想这 ...
- cocos2dx跨平台使用自定义字体
首先需要一个ttf文件的字体. 在ios中的方法: 把ttf文件放入资源文件下,然后在你的工程的Info.plist文件中新建一行(Add Row),添加key为:Fonts provided by ...
- @valid表单验证demo
springMVC 表单验证demo 视图层使用的是jsp