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

被折叠的 条评论
为什么被折叠?



